C#设计模式——外观模式(Facade Pattern)
一、概述
在系统设计中,某一个系统可能非常庞大,用户要使用该系统就不得不掌握大量的接口,造成使用的不便。这时可以考虑将该系统细分成一系列子系统并使子系统间的耦合降到最低,利用外观模式提供一个外观对象,为这一系列子系统提供一个简单的使用接口,这样用户只需要掌握外观对象上的少量接口即可使用该系统。就以汽车为例,一辆汽车由引擎、车轮、刹车等无数子系统构成,大多数用户在实际使用过程中并不关心这些子系统之间的工作细节,他们只希望能简单的启动、刹车即可。
二、外观模式
外观模式为系统中的一组接口定义了一个高层接口,这个接口使得这一系统更加容易使用。外观模式能有效简化外部程序和系统间的交互接口,将外部程序的演化和内部子系统的变化之间的依赖解耦。其结构图如下:

Facade知道哪些子系统类负责处理请求,并将客户请求代理给适当的子系统对象。
Subsystem classes实现了子系统的功能,处理由Facade对象指派的任务,但并不包含Facade对象的任何信息。
三、示例
我们就拿汽车为例。
首先定义引擎、车轮、刹车等子系统。

1 class Engine
2 {
3 public void Start()
4 {
5 Console.WriteLine("Engine Start");
6 }
7 }
8
9 class Wheel
10 {
11 public void TurnOn()
12 {
13 Console.WriteLine("Wheel is turned");
14 }
15 public void Stop()
16 {
17 Console.WriteLine("Wheel is stopped");
18 }
19 }
20
21 class Braker
22 {
23 public void Brake()
24 {
25 Console.WriteLine("Brake!");
26 }
27 }

接着定义汽车的Facade对象。

1 class CarFacade
2 {
3 private Engine _engine;
4 private Wheel[] _wheels;
5 private Braker _braker;
6
7 public CarFacade()
8 {
9 _engine = new Engine();
10 _wheels = new Wheel[4];
11 for (int i = 0; i < _wheels.Length; i++)
12 {
13 _wheels[i] = new Wheel();
14 }
15 _braker = new Braker();
16 }
17 public void Run()
18 {
19 _engine.Start();
20 foreach (Wheel wheel in _wheels)
21 {
22 wheel.TurnOn();
23 }
24 }
25 public void Brake()
26 {
27 _braker.Brake();
28 foreach (Wheel wheel in _wheels)
29 {
30 wheel.Stop();
31 }
32 }
33 }

这样我们只需要使用Façade对象即可实现对汽车的操作。

1 static void Main(string[] args)
2 {
3 CarFacade car = new CarFacade();
4 car.Run();
5 car.Brake();
6 Console.ReadLine();
7 }

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)隐藏系统的复杂性,并向客户端提供了一 ...
随机推荐
- JS 获取自定义标签
<abc-aaa xwe='sdf'>AAAAAAAAAAAAAAAAAAAAAA</abc-aaa> alert($("abc-aaa").attr(&q ...
- .net core 1.0 实现负载多服务器单点登录
前言 .net core 出来有一时间了,这段时间也一直在做技术准备,目前想做一个单点登录(SSO)系统,在这之前用.net时我用习惯了machineKey ,也顺手在.net core 中尝试了一上 ...
- CSS3学习笔记——伪类hover
最近看到一篇文章:“Transition.Transform和Animation使用简介及应用展示” ,想看看里面 “不同缓动类效果demo”例子的效果,发现了一个问题如下: .Trans_Bo ...
- 关于android中线性布局的layout_gravity属性
当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用.即:left,right,center_horizon ...
- 物料分类账 [COML] PART 1 - 概览
物料分类账 [COML] PART 1 - 概览 一).原理 1). •实际成本/物料分类帐是产品成本控制模块的一个子模块,产品成本控制包括三个子模块,产品成本计划,成本对象控制,实际成本/物料分类帐 ...
- volley中图片加载
volley图片加载有三种方式: 记得:Volley中已经实现了磁盘缓存了,查看源码得知通过 context.getCacheDir()获取到了 /data/data/<application ...
- [转载]JavaScript 中小数和大整数的精度丢失
标题: JavaScript 中小数和大整数的精度丢失作者: Demon链接: http://demon.tw/copy-paste/javascript-precision.html版权: 本博客的 ...
- 让IE8支持HTML5及canvas功能!
微软出的IE9支持HTML5,但因为不支持XP系统,暂时我还用不了. 即使能用,现阶段如果开发HTML5页面,并考虑到兼容性问题的话,恐怕也得让自己的界面支持IE6-8吧. 首先,需要让IE支持HTM ...
- itextpdf JAVA 输出PDF文档
使用JAVA生成PDF的时候,还是有些注意事项需要处理的. 第一.中文问题,默认的itext是不支持中文的,想要支持,需要做些处理. 1.直接引用操作系统的中文字体库支持,由于此方案限制性强,又绑定了 ...
- 现代JavaScript开发者的工具箱
自从HTML5变得流行以来,整个Web平台取得了长足的进步,人们也开始将JavaScript视为一门能够创建复杂应用的语言.许多新的API纷纷浮现,而关于浏览器如何应用这些技术的文章也大量涌现. 作为 ...