设计模式-外观模式(Facade Pattern)
本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/
外观模式简介
外观模式的作用用一句话说就是简化接口,举个例子楼主每次编程的时候都要点开IDE、点开一本电子书、点开音乐播放器、点开QQ,非常的麻烦,如果能有一个一键打开这些所有东西的功能键是不是会很好?这就是外观模式所做的事情。
外观模式的定义和基本结构
定义:外观模式为一个接口众多的子系统提供一个统一的高层接口,使这个子系统更加容易使用。
来自《Head First》里的一张结构图
aaarticlea/png;base64,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" alt="" />
subsystem classes:代表一堆子系统中杂乱的接口。
Facade:外观模式提供的高层次接口。
client:客户端,通过Facade这个简单的接口来使用这个复杂的子系统。
一个简单的实例(java)
我们继续简介中的例子,我们假设操作系统就是我们的复杂的子系统,里面的软件形成了一个个可供使用的接口,楼主要开始编程要依次调用IDE,电子书阅读器,音乐播放器,QQ这四个软件使用接口中的open方法,如果我们提供一个高层次的接口里面运用组合包含这四个软件的示例,并提供一个startCoding()方法,那么楼主以后就不用一个一个调用,只用调用一个方法就好,这就是用高层接口简化了使用,是不是特别的简单呢~下面给出代码实现,给出IDE,EBook,MusicPlayer,QQ四个类,然后提供一个simpleFacade类来简化这四个类的使用。
四个软件类代码如下
public class IDE {
public void open(){
System.out.println("open IDE");
}
}
public class EBook {
public void open(){
System.out.println("open EBook");
}
}
public class MusicPlayer {
public void open(){
System.out.println("open MusicPlayer");
}
}
public class QQ {
public void open(){
System.out.println("open QQ");
}
}
SimpleFacade类的代码
public class SimpleFacade {
private IDE ide;
private EBook ebook;
private MusicPlayer mp;
private QQ qq;
public SimpleFacade(IDE ide,
EBook ebook,
MusicPlayer mp,
QQ qq){
this.ide=ide;
this.ebook=ebook;
this.mp=mp;
this.qq=qq;
}
public void startCoding(){
ide.open();
ebook.open();
mp.open();
qq.open();
System.out.println("Let's start coding");
}
}
测试代码如下
public class Test {
public static void main(String[] args) {
SimpleFacade sf = new SimpleFacade(new IDE(),
new EBook(),
new MusicPlayer(),
new QQ());
sf.startCoding();
}
}
输出如下:
aaarticlea/png;base64,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" alt="" />
外观模式和适配器模式的区别
两者都用到了包装这一方法,但是目的完全不一样.
适配器模式的目的是为了改变接口,把任意接口改变成我们需要的接口,重点在改变。
外观模式的目的是为了简化接口,方便人们的使用 ,重点在简化。
外观模式到此结束♪(^∇^*)。
参考资料:《Head First 设计模式》。
设计模式-外观模式(Facade Pattern)的更多相关文章
- C#设计模式——外观模式(Facade Pattern)
一.概述 在系统设计中,某一个系统可能非常庞大,用户要使用该系统就不得不掌握大量的接口,造成使用的不便.这时可以考虑将该系统细分成一系列子系统并使子系统间的耦合降到最低,利用外观模式提供一个外观对象, ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 设计模式系列之外观模式(Facade Pattern)——提供统一的入口
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- 设计模式-外观模式(Facade)
简介 外观模式(Facade),将外部与内部子系统的通信通过一个统一的门面对象进行. 由两部分组成: 门面角色:供外部调用,内部可能组装了多个子系统,多个方法. 子系统角色:子系统的方法也可以直接供外 ...
- 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)
在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...
- python : 设计模式之外观模式(Facade Pattern)
#为啥要用外观模式举例说明 这个例子很形象,直接从人家博客上贴过来的,参考链接在下面 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶.茶具和开水,如图1(A)所示,而 ...
- 【UE4 设计模式】外观模式 Facade Pattern
概述 描述 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一 ...
- 外观模式Facade pattern
http://www.runoob.com/design-pattern/facade-pattern.html 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一 ...
随机推荐
- [uva11806]容斥定理
n*m的矩形 k个人 第一行,最后一行,第一列,最后一列都至少站有一个人 小水题 正着做不好做,要反着想,那就容斥定理,ABCD四种情况分别是那四个行列分别没有人. #include<cstdi ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列——map+hash+转换
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...
- 【NOIP】提高组2015 运输计划
[题意]n个点的树,m条链,求将一条边的权值置为0使得最大链长最小. [算法]二分+树上差分 [题解] 最大值最小化问题,先考虑二分最大链长. 对所有链长>mid的链整体+1(树上差分). 然后 ...
- Chrome 浏览器 autocomplete off无效
在表单填写时突然发现autocomplete 失效了 网上搜索后得出大概意思是在某些情况下确实无效[捂脸] 解决方案 大致原因是浏览器默认为type为password的input标签自动填充密码 这样 ...
- python 实现二叉树相关算法
一.构建与遍历二叉树 基本性质 1)在二叉树的第i层上最多有2i-1 个节点 .(i>=1)2)二叉树中如果深度为k,那么最多有2k-1个节点.(k>=1)3)在完全二叉树中,具有n个节点 ...
- [NOI2008] [bzoj1061] 志愿者招募
还是一道费用流的题目.话不多说,进入正题. 题意:给定n个点和m种从l到r覆盖一层的费用,求满足所有点的覆盖层数都大等于权值的最小费用 分析:要做到区间修改,看似比较麻烦. 用差分把区间修改变成单点修 ...
- shell下在while循环中使用ssh命令的问题
1 现象描述 最近使用ssh批量执行命令(已经做了密钥互信了),脚本读取配置文件中的主机列表(内容为每行一台主机IP地址),然后执行,可是每次只是执行第一台,就退出循环了. 2 排查思路 由于脚本比较 ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- TCP之connect
1. connect函数: #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, ...
- 5-3 Linux内核计时、延时函数与内核定时器【转】
转自:http://www.xuebuyuan.com/510594.html 5-3 Linux内核计时.延时函数与内核定时器 计时 1. 内核时钟 1.1 内核通过定时器(timer)中断来跟 ...