设计模式_ 外观模式(12)
来源:互联网 发布:圣戈班上海待遇知乎 编辑:程序博客网 时间:2024/06/07 17:33
- 什么是外观模式
- 外观模式的例子
- 外观模式的使用场景
- 外观模式的优缺点
- 闲言碎语
什么是外观模式
我们都知道,当电脑关机的时候,他的cpu,硬盘,光驱等等一系列东西都是处于关闭的状态.而当我们按下开机键的那一刻,电脑的电源箱通上电之后才去启动其他相关的设备.很明显,我们不能直接让电源和各种设备直接相连,这样不现实的的,每增加一个设备都去和电源和其他设备相连,这样电脑设计者根本不知道到底该给他留多少接口.与是他们引入的主板.电源和主板相连,其他设备在和主板相连,只要给主板通上足够的电压,其他设备通过主板获得电源以及通信,至于其他的问题他们只需要考虑主板该如何设计(电脑启动的具体过程:启动过程).这就是典型的外观模式.
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
UML
外观模式的例子
系统A
package com.studyJava.faced;//光驱部分public class CDDriver {// 光驱的启动public void startUp() {System.out.println("CDDriver startUp");}}
系统B
package com.studyJava.faced;//cpupublic class Cpu {// cpu的启动public void startUp() {System.out.println("Cpu startUp");}}
系统C
package com.studyJava.faced;//内存public class Memory {// 内存的启动方法public void startUp() {System.out.println("Memory startUp");}}
外观模式的核心
package com.studyJava.faced;//主板(模拟外观模式的核心)public class MainBoard_Faced {CDDriver cd = new CDDriver();Cpu cpu = new Cpu();Memory memory = new Memory();// 主板的启动(也在外观模式的核心方法)public void startUp() {System.out.println("MainBoard startUp");cd.startUp();cpu.startUp();memory.startUp();}}
外观模式的使用场景
(1)当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。
(2) 客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
(3) 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。
外观模式的优缺点
外观模式的主要优点如下:
(1) 它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。
(2) 它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。
(3) 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
外观模式的主要缺点如下:
(1) 不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活 性。
(2) 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。
闲言碎语
我觉得外观模式其实和组装模式很想,只是功能不同,一个是创建对象,一个是执行操作,但均是引入第三层对以降低系统耦合性!
- 设计模式_ 外观模式(12)
- 设计模式_外观模式
- java设计模式12_门面模式(外观模式)
- 大话设计模式_外观模式
- java设计模式_外观模式
- Java 设计模式_外观模式
- Unity_设计模式_外观模式_06
- 设计模式:12 外观模式
- 设计模式(12)-外观模式
- Java设计模式_(结构型)_外观模式
- 设计模式--外观模式
- 设计模式-外观模式
- 设计模式:外观模式
- 设计模式----外观模式
- 设计模式------外观模式
- 设计模式 外观模式
- 设计模式-【外观模式】
- 设计模式-----外观模式
- springmvc的web.xml详解
- numpy,scipy,matplotlib,pandas等简明教程
- python基础-Unit 1.认识python和基础知识
- spring boot pom文件模板
- CMake编译opencv-3.2.0出现 Downloading opencv_ffmpeg.dll...
- 设计模式_ 外观模式(12)
- java 线程的状态转换
- Hive的理论基础
- mysql数据库做插入或修改操作
- bzoj2301 [HAOI2011]Problem b(莫比乌斯反演)
- 轻院1073 级数求和
- 数据结构基础算法-堆
- HDU 6214 Smallest Minimum Cut (最小割最小割边)(两种算法的分析)
- DatabaseMetaData用法