GOF 设计模式Facade模式 笔记
Facade(外观)
意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
结构图
在以下情况使用:
- 当你要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变的越来越复杂,大多数模式使用时都会产生更多更小的类。这使得子系统更具有可复用性,也更容易对子系统进行定制,但也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来讲已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
- 客户程序与抽象类的实现部分之间存在很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
- 当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让它们仅通过Facade进行通信,从而简化了它们之间的依赖关系。
实现
Facade模式对客户屏蔽了子系统组件,减少了客户处理的对象的数目并使得子系统使用起来更加方便。因为客户不需要直接访问子系统对象。
就像总闸一样,房间有许多电器,当然可以一个一个关,但是可以设一个总闸,只需要关闭总闸就可以关闭所有的电器。
电器:
public class Computer {public void turnOff(){System.out.println("电脑关机");}
}
public class Light {public void turnOff(){System.out.println("关灯");}
}
public class TV {public void turnOff(){System.out.println("电视关机");}
}
总闸
public class MasterSwitch {public void turnOff(){new Computer().turnOff();new Light().turnOff();new TV().turnOff();}
}
Main
public class Main {public static void main(String[] args) {new MasterSwitch().turnOff();}
}
相关模式
Abstract Factory模式可以与Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。Abstract Factory也可以代替Facade模式隐藏那些与平台相关的类。
Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通信进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对像知道中介者并与他通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道Facade的存在。
通常来讲,仅需要一个Facade对象,因此Facade对象通常属于Singleton模式。
GOF 设计模式Facade模式 笔记相关推荐
- GOF 设计模式 Decorator模式 笔记
Decorator(装饰) 意图:动态的给一个对象添加一些额外的职责.就添加功能来说,Decorator模式相比生成子类更为灵活 结构图: 在以下情况适合使用 在不影响其他对象的情况下,以动态,透明的 ...
- GOF 设计模式 builder模式笔记
Builder(生成器) 意图:将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示. 在以下情况使用Builder模式 当创建复杂的对象应该独立于该对象的组成部分以及它们的装配 ...
- 重学设计模式 - Facade模式
1. Facade模式简介 Façade在建筑领域的意思是:(掩饰真相的)门面,也就意味着,如果你想探究更细节的真相就需要经过Façade. <设计模式>一书中对Façade模式的 ...
- C++设计模式-Facade模式
Facade模式 作用:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 动机 将一个系统划分成为若干个子系统有利于降低系统的复杂性.一 ...
- Java设计模式-代理模式笔记
代理模式 0 什么是代理模式 理解方式1 理解方式2 1 静态代理 1.1 代码实现 1.2 方法解读 1.3 优缺点 2 动态代理 2.1 具体实现 2.2 方法解读 2.3 注意 3 Cglib代 ...
- GoF设计模式——状态模式(C++实现)
文章目录 概念 UML结构图 代码实现 状态模式的使用场景 概念 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为. 在探讨状态模式的优雅之前,先来看看以下代码场景: enum ...
- 设计模式-Facade模式
门面(Facade)模式的理解与应用 概念 门面模式,指子系统的外部与其内部的通信必需通过一个统一的门面(Facade)对象进行,示意图如下: 应用场景 为一个复杂子系统提供一个简单接口 子系统常常因 ...
- 门面设计模式(Facade Pattern)
GOF设计模式 Facade Pattern 门面设计模式 门面模式例子:我有一个专业的Nikon相机,我就喜欢自己手动调光圈.快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会.幸好相机 ...
- GoF设计模式之代理设计模式
该文章首发于GoF设计模式-代理模式 概述 代理模式(Proxy Pattern),为其他对象提供一种代理以控制对这个对象的访问. 代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可 ...
最新文章
- PHP获取时间排除周六、周日的两个方法
- onchange onpropertychange 和oninput事件的区别
- 挖洞技巧:任意账号密码重置
- WARN HiveConf: HiveConf of name hive.metastore.local does not exist注意事项
- C/C++语言函数学习(4)字符串处理函数
- springboot整合websocket实现简易版单人聊天
- 硬件基础知识---(3)电阻2
- AspNetPager使用方法
- 解决Oracle安装过程中出现的缺少KEY_XE.reg文件的问题
- WinAPI之ReleaseSemaphore
- 微信公众号运营必备神器汇总
- php7列目录_linkinfo()
- python实现pdf格式转换图片格式
- 2018-8-10-三种方式设置特定设备UWP-XAML-view
- 交换机的各种工作模式
- 思科ISR4400交换机查看光模块光功率
- python爬b站弹幕_【Python爬虫】第五课(b站弹幕)
- 形式语言与自动机理论(1)----基础介绍
- activiti 6.0 editor汉化详解
- 《你来画,我来猜》游戏简单实现(html、css、jquery)