外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式
外观模式(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种设计模式-结构型模式之外观模式相关推荐
- 设计模式(结构型)之享元模式(Flyweight Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式——结构型之用桥梁模式(Bridge Pattern)将“抽象”与“实现”解耦(五)
引言 相信对于现实生活中这样的情况都不陌生,比如说开关与它具体控制的电器,开关的类型多种多样,而电器也是千变万化,两者之间相对独立变化却又耦合在一起,再比如说奶茶店的奶茶,有不同规格大小.不同口味.不 ...
- [设计模式] 结构型:享元模式(Flyweight Pattern)
文章目录 什么是享元模式 设计与实现 Integer应用享元模式 什么是享元模式 "享"的意思是"共享","元"的意思是"对象&q ...
- 设计模式(结构型)之代理模式(Proxy Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式-结构型模式篇
设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...
- 12、设计模式-结构型模式-外观模式
外观模式 定义: 为子系统中的一组接口提供一个统一的入口.外观模式定义 了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式又称为门面模式,它是一种对象结构型模式. 外观模式是迪米特法则的一 ...
- Java设计模式之结构型:享元模式
一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...
- Java设计模式之结构型:装饰器模式
一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...
- C++23种设计模式(1)-工厂方法模式
C++常用的设计模式有23种. 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享 ...
最新文章
- 怎样成为一个高手观后感
- github用相对路径显示图片_url-图像未显示在GitHub的README.md中
- python参数估计_python简单实现最大似然估计scipy库的使用详解
- 夺命雷公狗-----tp中遇到数据乘积的问题的遇见
- 21天学通python pdf-21天学通Python PDF百度网盘资源下载
- awk收不到数据的问题
- 来谈谈Spring构造函数注入的循环依赖问题
- 监控PGA最大空间、分配
- 高薪诚聘游戏引擎研发,有意者请与我联系!
- android调用邮件应用发送email
- 智能算法---模拟退火搜索函数最小值
- oracle转类型sql,[转]SQL Server 和Oracle 数据类型对应
- lamp整合三连发(1)
- Java进制转换问题(详解)
- Elasticsearch设置账号密码
- 运算符、表达式和语句
- 港美股交易系统开发框架构造简述篇
- 离散选择模型(DCM)和深度神经网络(DNN)结合
- linux磁盘第一个扇区分析,[转]Linux中如何读写硬盘上指定物理扇区
- git head指向老版本_16. branch与HEAD的理解,使用git reset恢复到过去的某个版本
热门文章
- python 列表推导_说说在 Python 中如何使用列表推导
- chrome postman插件_一款 Postman 的开源替代品: Postwoman
- 单片机高手必知的三个重要步骤(干货分享)
- dns的服务器地址是多少当前位置,dns的服务器地址设置为多少
- mysql同步到另一台服务器_mysql两台服务器主从同步
- 计算机网络和传统电话网络的最大区别是,传统电话和网络电话有什么区别
- kodi android设置中文,Kodi(原XBMC)
- 十大笔记本电脑排行_十大笔记本电脑品牌排行榜 世界上最受欢迎的电脑品牌...
- 网络信号管理大师怎么用_常说的OKR管理法,到底怎么用?
- 2018牛客网暑期ACM多校训练营(第十场)J	Rikka with Nickname(二分,字符串)