Facade 设计模式
目的
- 在一个子系统的一组接口上提供一个统一的接口。Facade 设计模式定义了一个更高级别的接口,使子系统更容易使用。
- 通过一个更加简洁的接口来包装一个复杂的子系统。
解决的问题
客户端需要一个简化的接口来覆盖复杂的子系统的总体功能。
讨论
Facade 设计模式通过一个单一的接口对象来封装一个复杂的子系统。这样减少了学习子系统复杂的学习曲线。它也实现了不同潜在客户端的低依赖性和解耦。换句话说,如果Facade 是唯一访问子系统的入口,那么它将限制一些特性何灵活性,那样则可能需要所谓的高级用户。
Facade对象应该是一个相当简单的倡导者或是服务商。它不应该成为一个无所不知的圣人或“上帝”对象。
架构
Facade 采取了一种"被神秘的事物遮蔽起来的东西"的策略, 然后插入了一个包装器来驯服无形的神秘的一团软件.

SubsystemOne 与 SubsystemThree 并不与内部组件SubsytemTwo进行交互,而是通过 SubsystemTwoWrapper 这个 Facade(例如,更高层次的抽象)。

举例
Facade 定义了统一的,高层次的接口以便于非常容易地使用子系统。举例,顾客经常会遇到这样的问题,如从商品目录中订购产品。当用户拨打电话并向客户前台沟通时,这时客户前台便充当Facade的角色,她提供了一个接口去查询订单执行部门,账单部门和商品运送部门。

总结
- 为子系统或组件确定一个简单,统一的接口。
- 设计一个"wrapper"类来封装子系统。
- Facade或wapper封装了组件的协作何复杂性,并委托合适的方法。
- 客户端只能通过Facade访问子系统。
- 考虑额外的Facade是否会增加价值。
规则
Facade 定义了一个全新的接口,而适配器模式使用已存在的接口,适配器的目的是使两个存在的接口在一起工作而不是定义一个全新的接口。
享元模式用来展示多个小的对象,而Facade用单一对象来呈现整个子系统。
中介者模式与Facade类似,它是存在的class的一种抽象,抽象和集中任意同事对象之间的通信。它千篇一律的添加功能,并被同事对象所知和引用。相反,Facade 为子系统定义了一个简单的接口,它并不添加新的功能,并且不被子系统的类所知。
抽象工厂模式可以作为Facade的一种替代来隐藏平台指定的类。
Facade通常设计成单例模式因为只需要一个Facade对象。
适配器模式和Facade都使用了封装器,但他们属于不同的封装。Facade的目的是产生一个简单的接口,而适配器的目的是设计一个存在的接口。Facade通常用来封装多个对象而适配器模式封装一个对象。Facade可以设计一个从前台到后台一个单一复杂的对象而适配器模式封装系统存在的对象。
Facade 设计模式的更多相关文章
- 23种设计模式(1)-Facade设计模式
前记 曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结果利用C类实例的 ...
- Facade设计模式
Facade模式 Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行.Facade模式提供一个高层次的接口,使得子系统更易于使用. 就如同医院的接待员一样,Fac ...
- 了解facade设计模式
Facade模式 Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行.Facade模式提供一个高层次的接口,使得子系统更易于使用. 就如同医院的接待员一样,Fac ...
- (转载)设计模式学习笔记(十一)——Facade外观模式
(转载)http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户 ...
- C#设计模式之十一外观模式(Facade)【结构型】
一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...
- C#设计模式之十外观模式(Facade Pattern)【结构型】
一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...
- C++设计模式 之 “接口隔离” 模式:Facade、Proxy、Mediator、Adapter
“接口隔离”模式 在组建构建过程中,某些接口之间之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案. 典型模式 #Facad ...
- c#设计模式之:外观模式(Facade)
一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...
- 设计模式10: Facade 外观模式(结构型模式)
Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...
随机推荐
- Android开发 - Fragment与Activity生命周期比较
1. Fragment的生命周期 见下图 2. 与Activity生命周期的对比 见下图 3. 代码场景演示实例 切换到该Fragment: AppListFragment(7649): onAtta ...
- Jquery——动画效果
jquery中常用的动画的方法就是hide()与show(). $(element).hide()这段代码可以与这相等element.css("display","non ...
- 对IIC总线时序的一点理解以及ACK和NACK(NAK)
参考自:http://blog.chinaunix.net/uid-16100003-id-3059814.html 关于IIC的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都 ...
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291469.html import java.util.concurrent.Callable ...
- MySQL事物系列:3:innodb_flush_log_at_trx_commit小实验
1:创建表和存储过程 mysql> create database trx; Query OK, 1 row affected (0.02 sec) mysql> USE trx Data ...
- mysql 备份还原
1.文件备份 2.dump mysqldump -h 192.168.102.73 -uroot -p123456 edc >/webapp/edcapp/edc.sql mysql ...
- edit-distance-动态规划,计算两词之间变换的最小步数
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- 使用VS2015开发asp程序让IIS express 允许的父路径的方法
一.Win7更好修改下面地址的文件: C:\Program Files (x86)\IIS Express\config\schema或C:\Program Files\IIS Express\con ...
- Xamarin.Android之SQLite.NET ORM
一.前言 通过<Xamarin.Android之SQLiteOpenHelper>和<Xamarin.Android之ContentProvider>的学习,我们已经掌握了如何 ...
- mysql可视化工具
比较mysql manager lite 和phpmyadmin: 1.phpmyadmin有中文界面, 可以快速入门,但友好性远没有SQL Manager Lite强大 2.SQL Manager ...