外观模式(Facade)

外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例)

我们先看下实现类:

CPU类:

存储器Memory类:

磁盘Disk类:

Computer类(作为外观类):

测试类如下:

输出:

start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!

如果我们没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用,这,就是外观模式!

 外观模式的优点:

   松散耦合:

  外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。

   简单易用:

  外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。

  更好的划分访问层次:

  通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式相关推荐

  1. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  2. 设计模式——结构型之用桥梁模式(Bridge Pattern)将“抽象”与“实现”解耦(五)

    引言 相信对于现实生活中这样的情况都不陌生,比如说开关与它具体控制的电器,开关的类型多种多样,而电器也是千变万化,两者之间相对独立变化却又耦合在一起,再比如说奶茶店的奶茶,有不同规格大小.不同口味.不 ...

  3. [设计模式] 结构型:享元模式(Flyweight Pattern)

    文章目录 什么是享元模式 设计与实现 Integer应用享元模式 什么是享元模式 "享"的意思是"共享","元"的意思是"对象&q ...

  4. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  5. 设计模式-结构型模式篇

    设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...

  6. 12、设计模式-结构型模式-外观模式

    外观模式 定义: 为子系统中的一组接口提供一个统一的入口.外观模式定义 了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式又称为门面模式,它是一种对象结构型模式. 外观模式是迪米特法则的一 ...

  7. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  8. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  9. C++23种设计模式(1)-工厂方法模式

    C++常用的设计模式有23种. 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享 ...

最新文章

  1. 怎样成为一个高手观后感
  2. github用相对路径显示图片_url-图像未显示在GitHub的README.md中
  3. python参数估计_python简单实现最大似然估计scipy库的使用详解
  4. 夺命雷公狗-----tp中遇到数据乘积的问题的遇见
  5. 21天学通python pdf-21天学通Python PDF百度网盘资源下载
  6. awk收不到数据的问题
  7. 来谈谈Spring构造函数注入的循环依赖问题
  8. 监控PGA最大空间、分配
  9. 高薪诚聘游戏引擎研发,有意者请与我联系!
  10. android调用邮件应用发送email
  11. 智能算法---模拟退火搜索函数最小值
  12. oracle转类型sql,[转]SQL Server 和Oracle 数据类型对应
  13. lamp整合三连发(1)
  14. Java进制转换问题(详解)
  15. Elasticsearch设置账号密码
  16. 运算符、表达式和语句
  17. 港美股交易系统开发框架构造简述篇
  18. 离散选择模型(DCM)和深度神经网络(DNN)结合
  19. linux磁盘第一个扇区分析,[转]Linux中如何读写硬盘上指定物理扇区
  20. git head指向老版本_16. branch与HEAD的理解,使用git reset恢复到过去的某个版本

热门文章

  1. python 列表推导_说说在 Python 中如何使用列表推导
  2. chrome postman插件_一款 Postman 的开源替代品: Postwoman
  3. 单片机高手必知的三个重要步骤(干货分享)
  4. dns的服务器地址是多少当前位置,dns的服务器地址设置为多少
  5. mysql同步到另一台服务器_mysql两台服务器主从同步
  6. 计算机网络和传统电话网络的最大区别是,传统电话和网络电话有什么区别
  7. kodi android设置中文,Kodi(原XBMC)
  8. 十大笔记本电脑排行_十大笔记本电脑品牌排行榜 世界上最受欢迎的电脑品牌...
  9. 网络信号管理大师怎么用_常说的OKR管理法,到底怎么用?
  10. 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)