C#设计模式(8)——外观模式
1.外观模式介绍
外观模式也被叫做门面模式,这种模式的作用是:隐藏系统的复杂性,并向客户端提供了一个可以访问系统的统一接口,这个统一的接口组合了子系统的多个接口。使用统一的接口使得子系统更容易被访问或者使用。 以去医院看病为例,去医院看病时可能要去挂号、门诊、划价、取药等,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。我们先了解下外观模式的三种角色:
子系统角色:实现了各种子功能,子系统之间可以相互交户,也可以提供给客户端直接调用的接口。
门面角色:熟悉子系统的功能,可以把子系统的功能组合在一起然后提供一个统一的接口供客户端调用。
客户端角色:调用Facede来实现要完成的功能。

下边使用网友的电脑开关机的例子(链接:java设计模式之外观模式(门面模式))介绍外观模式的用法:每台电脑都有CPU,Memory,Disk。我们开关电脑时不会一个一个地打开或关闭各个部件,而是通过一个统一的开关机按钮一次性打开各个部件。通过外观模式可以实现用户的与部件间的解耦。

子系统(cpu,memory,disk)代码:
/// <summary>
/// CPU子系统
/// </summary>
public class CPU
{
public void CPUStart()
{
Console.WriteLine("CPU is start...");
}
public void CPUShutdown()
{
Console.WriteLine("CPU is shot down...");
}
} /// <summary>
/// 内存子系统
/// </summary>
public class Memory
{
public void MemoryStart()
{
Console.WriteLine("Memory is start...");
}
public void MemoryShutdown()
{
Console.WriteLine("Memory is shot down...");
}
} /// <summary>
/// 硬盘子系统
/// </summary>
public class Disk
{
public void DiskStart()
{
Console.WriteLine("Disk is start...");
}
public void DiskShutdown()
{
Console.WriteLine("Disk is shot down...");
}
}
门面类(Computer)代码:
/// <summary>
/// 电脑 facede角色
/// </summary>
public class Computer
{
private CPU cpu;
private Memory memory;
private Disk disk;
public Computer()
{
this.cpu = new CPU();
this.memory = new Memory();
this.disk = new Disk();
} public void Start()
{
cpu.CPUStart();
memory.MemoryStart();
disk.DiskStart();
Console.WriteLine("computer start end!");
}
public void Shutdown()
{
cpu.CPUShutdown();
memory.MemoryShutdown();
disk.DiskShutdown();
Console.WriteLine("computer shutdown end!");
}
}
客户端调用:
class Program
{
static void Main(string[] args)
{
Computer computer = new Computer();
//开机
computer.Start();
Console.WriteLine();
//关机
computer.Shutdown();
Console.ReadKey();
}
}
程序运行结果:

2.小结
外观模式的使用:
外观模式在我们的开发中使用的比较频繁,以三层架构为例:
子系统角色:Dal层,负责数据访问,比如有UserDal和RoleDal,UserDal返回的数据格式为[名字:张三,角色ID:3],RoleDal层返回的数据格式[角色ID:3,角色名:管理员]
门面角色:Bll层,负责具体业务(汇总子系统的功能,这里使用UserDal和RoleDal两个子系统角色的功能),返回的数据格式[名字:张三 ,角色名:管理员]
客户端角色:UI层,通过Bll层直接拿到格式如[名字:张三 ,角色名:管理员]的数据。
外观模式的优点:
1.隐藏了系统的复杂性,让客户端使用系统功能时变很简单;
2.实现客户端和子系统间的解耦。
外观模式的缺点:
1.不符合开闭原则,如客户端要使用更多功能时,不仅仅在子系统进行添加或修改操作,也必须修改门面层。
C#设计模式(8)——外观模式的更多相关文章
- 每天一个设计模式-2 外观模式(Facade)
每天一个设计模式-2 外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...
- C#设计模式(11)——外观模式(Facade Pattern)
一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 北风设计模式课程---外观模式(Facade)总结
北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- java设计模式之外观模式(门面模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计 ...
- 【GOF23设计模式】外观模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_外观模式.公司注册流程.迪米特法则 package com.test.facade; public interface 工 ...
随机推荐
- Django ContentType组件
ContentType组件 引入 现在我们有这样一个需求~我们的商城里有很多的商品~~节日要来了~我们要搞活动~~ 那么我们就要设计优惠券~~优惠券都有什么类型呢~~满减的~折扣的~立减的~~ 我们对 ...
- Google Apps的单点登录-谷歌使用的单点登录
简述: Customer :客户 Google:谷歌 Identity Provider:身份提供者安全断言标记语言(英语:Security Assertion Markup Language,简称S ...
- 爬虫_中国天气网_文字天气预报(xpath)
import requests from lxml import etree headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/5 ...
- hz2016的noip模拟赛(d1 + d2)
QAQ怕不是真的凉凉 d1 205 + d2 170 = 375 感觉难度和noip差不多 那么这可是有够凉的 官方题解 D1 D2 D1 T1 某地的ENLIGHTENED总部总部有N个Agent, ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...
- Nginx+Tomcat-cluster构建
-----------ReProxy-------------------------Client-----------192.168.56.202 nginx 192.168.56.200 Tomc ...
- A1042. Shuffling Machine
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- 你应该要知道的vue.js
前言 小组同事最近都在学习前端,目前我们小组前端技术栈主要是vue.在和同事交流过程成,发现他们对vue都不了解,所以整理了问的比较多的问题. 组件data为什么必须是函数? 因为组件可能被多处使用, ...
- SecureCRT或XShell软件
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. Xshell 是一个强大的安全终端模拟软件,它支持SSH1 ...
- Eclipse 在线安装properties编辑插件
在eclipse中,如果在properties文件中写中文,会被自动保存成unicode编码,如lab.submitbutton=\u63d0\u4ea4. 这在查看properties文件时 ...