外观模式——提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口让子系统更容易使用。

  

  一个外观包含了为许多对象和对他们的操作,使得重复这些操作更方便。

  假如客厅里有灯(Lights)

  

class Lights
{
public void on()
{
Console.WriteLine("Lights on");
}
public void off()
{
Console.WriteLine("Lights off");
}
}

  电视(TV)

  

class TV
{
public void on()
{
Console.WriteLine("TV on");
}
public void off()
{
Console.WriteLine("TV off");
}
}

  和光盘播放器(DVDplaer)

  

class DvdPlayer
{
public void on()
{
Console.WriteLine("DVD player on.");
}
public void off()
{
Console.WriteLine("DVD player off");
}
public void play()
{
Console.WriteLine("Start playing");
}
public void end()
{
Console.WriteLine("End End playing");
}
}

   可以定义一个外观——影院模式,影院模式提供开始看电影和结束电影两个方法,分别对应一系列的操作。

 class Facade
{
TV tv;
DvdPlayer dvd;
Lights lights; public Facade(TV tv, DvdPlayer dvd, Lights lights)
{
this.tv = tv;
this.dvd = dvd;
this.lights = lights;
}
public void watchMovie()
{
Console.WriteLine("Get ready to watch a movie");
lights.off();
tv.on();
dvd.on();
dvd.play();
}
public void endMovie()
{
Console.WriteLine("\nShutting movie theater down..");
lights.on();
dvd.end();
dvd.off();
tv.off();
}
}

  这样就有了方便的一键影院模式,而不用每次都'亲自'操作各种设备。

class Program
{
static void Main(string[] args)
{
TV tv = new TV();
DvdPlayer dvd = new DvdPlayer();
Lights lights = new Lights();
Facade facade = new Facade(tv,dvd,lights);
facade.watchMovie();
facade.endMovie();
Console.ReadKey();
} }

输出结果:

设计模式C#实现(三)——外观模式的更多相关文章

  1. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

  2. Head First 设计模式之适配器模式与外观模式

    Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计 ...

  3. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  4. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  5. Java设计模式(11)外观模式(Facade模式)

    外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { C ...

  6. 设计模式(十一)外观模式(Facade Pattern)

    一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...

  7. C#设计模式(8)——外观模式

    1.外观模式介绍 外观模式也被叫做门面模式,这种模式的作用是:隐藏系统的复杂性,并向客户端提供了一个可以访问系统的统一接口,这个统一的接口组合了子系统的多个接口.使用统一的接口使得子系统更容易被访问或 ...

  8. 设计模式学习系列9 外观模式Facade

    1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改 ...

  9. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

随机推荐

  1. 点餐系统web版功能需求

                餐厅到店点餐系统需求分析 (版本v1.0.0)               成文信息 主题词: 需求分析 作  者: 14商软ETC 文档类别: 审  核: 批  准: 文档性 ...

  2. Sprint1(11.20)

    Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:web版-餐厅到店点餐系统 4.我们详细分析了点餐系统实现的具体功能,分为两种方案: 方案一:此方 ...

  3. STL or Force --- CSU 1553: Good subsequence

    Good subsequence Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1553 Mean: 给你一个长 ...

  4. Requested registry access is not allowed(不允许所请求的注册表访问权)

    尝试创建自定义事件日志时,将会收到“Requested registry access is not allowed(不允许所请求的注册表访问权)”错误消息 EventLog.CreateEventS ...

  5. C#中this的用法,你用过几种?

    C#中this的用法,你用过几种?[含源码示例] 摘自:http://www.2cto.com/kf/201110/107591.html C#中的this用法,相信大家应该有用过,但你用过几种?以下 ...

  6. 解决IIS Web部署 svg/woff/woff2字体 404错误

    最近在IIS上部署web项目的时候,发现浏览器总是报找不到woff.woff2字体的错误.导致浏览器加载字体报404错误,白白消耗了几百毫秒的加载时间. 一开始以为是路径的问题,检查发现路径也没错. ...

  7. Ajax基础实例

    前端代码 <script type="text/javascript"> var xmlhttp; function go(url) { xmlhttp=null; i ...

  8. git本地提交项目到你的github

    第一步:建立git仓库(若已经创建则跳过该步) cd到你的本地项目根目录下,执行git命令 git init 第二步:将项目的文件添加到仓库中 git add fileName 如果想添加本次仓库中的 ...

  9. php实现快速排序

    下午练习时候,把经典排序快速排序做了,以下是我的代码 <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-8-29 ...

  10. Java8 如何进行stream reduce,collection操作

    Java8 如何进行stream reduce,collection操作 2014-07-16 16:42 佚名 oschina 字号:T | T 在java8 JDK包含许多聚合操作(如平均值,总和 ...