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 ...
随机推荐
- Unity3d for beginners
tutorial addr: https://www.youtube.com/watch?v=QUCEcAp3h28 1.打开Unity3d File->newProject ->cre ...
- JavaScript String 对象常用方法
<script type="text/javascript"> //concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串. var str = &q ...
- GCC中的内嵌汇编语言
原文可参考:GCC中的内嵌汇编语言 一.声明 虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的.有些汇编语言代码是直接写在汇编源程序中的,特别是Li ...
- xampp 教程
xampp教程1 使用安装包进行安装 (目前有三种可供选择下载的XAMPP for Windows: 安装包 简单且安全:XAMPP 的便捷安装程序.) 使用安装包来安装XAMPP是最简单的方法. ...
- Aerospike系列:4:简单的增删改查aql
[root@localhost bin]# aql --help Usage: aql OPTIONS OPTIONS -h <host> The hostname to the serv ...
- vim note write
Try: :vert sb N which will open a left vertical split (by default, unless you have modified some opt ...
- 基于SQL和PYTHON的数据库数据查询select语句
#xiaodeng#python3#基于SQL和PYTHON的数据库数据查询语句import pymysql #1.基本用法cur.execute("select * from biao&q ...
- python之模块cmath
# -*- coding: utf-8 -*-#python 27#xiaodeng#python之模块cmath #复数的数学函数,如log.tan.sin等函数用法,针对我目前的情况用途较少,暂不 ...
- Leveldb 使用说明文档
Leveldb 使用说明文档 原作者:Jeff Dean, Sanjay Ghemawat 翻译:乌合之众solym@sohu.com 英文原文地址https://rawgit.com/google/ ...
- WD backup西部盘数据备份
西部数据(WD),硬盘备份数据!防止数据丢失.损坏.... 起因: 电脑上存储很多资料,之前有500G的东芝硬盘(现在插头不灵敏),故决定换个好点的1T硬盘.电脑在一夜间打不开,不能识别硬盘!怎么重启 ...