【返回目录】

外观模式适用于系统内部有太多独立的子系统,并且从用户的角度来考虑又必须提供一致且相对简单的接口的情景,因此我觉得用飞机来做一个形象的描述会比较合适,请不要把飞机想象的过于复杂(当然,想象得过于简单也是错误的)。

飞机内部有众多的子系统,假如你有机会进入飞机内部(不是指客舱)看看,你就会看到数不清的各种线路,这些线路连接着各种子系统,并且子系统之间的干扰并不多(否则飞机很容易失控),但是尽管飞行员是经历了4年本科学习并且毕业后还时常参加各种实际飞行和训练,如果飞机的设计师们觉得这样的高智商人才一定可以很轻松地操作复杂的机器,那么飞机也就不再是最安全的交通工具了(抛开成见吧,这是事实)。

我们简单罗列几个子系统:动力系统、导航系统和无线电系统。比如动力系统,飞行员向前推动节流阀,飞机的引擎将加速工作并将飞机推上蓝天;导航系统相当重要,否则飞机就成了瞎子一样,飞行员可以通过GPS来获知自己当前的飞行位置、高度和轨迹等;无线电系统也很重要,飞机的通讯就全靠它了(为了保障飞行安全,飞机上禁止点狼烟),很多时候飞行员都要借助ILS(Instrument Landing System,仪表着陆系统)来保证着陆的安全。但是,飞行员的培养侧重于对飞机的驾驶技术而不是修理,飞行员通过无线电来接受机场ILS信号时并不非要搞清楚电子信号是从哪里接收到又经过哪些电子线路才到达驾驶舱的;飞行员向前推动节流阀的时候,也不是必须知道信号是通过哪些管道到达发动机并控制其转速和油量才能使飞机加速的。飞机之所以安全,有很重要一部分功能是设计师们给飞行员提供了一套相对简单、明了的操作界面。

   1: using System;
   2:  
   3: namespace Autumoon.DesignPatterns.Facade
   4: {
   5:     public class EngineSubSystem
   6:     {
   7:         public void Throttle()
   8:         {
   9:             Console.WriteLine("Throttle of Engine Sub System.");
  10:         }
  11:     }
  12:  
  13:     public class NavigationSubSystem
  14:     {
  15:         public void GPS()
  16:         {
  17:             Console.WriteLine("GPS of Navigation Sub System.");
  18:         }
  19:     }
  20:  
  21:     public class RadioSubSystem
  22:     {
  23:         public void ILS()
  24:         {
  25:             Console.WriteLine("ILS of Radio Sub System.");
  26:         }
  27:     }
  28:  
  29:     public class FacadeDemo
  30:     {
  31:         public void Flight()
  32:         {
  33:             new EngineSubSystem().Throttle();
  34:             new NavigationSubSystem().GPS();
  35:             new RadioSubSystem().ILS();
  36:         }
  37:     }
  38: }

其实经过一段时间的训练,您也可以驾驶飞机的。

   1: static void Main(string[] args)
   2: {
   3:     #region Facade
   4:     new FacadeDemo().Flight();
   5:     #endregion
   6:  
   7:     Console.ReadLine();
   8: }

转载于:https://www.cnblogs.com/Autumoon/archive/2008/02/20/1074885.html

3.5 Facade(外观)相关推荐

  1. 设计模式笔记 10.Facade 外观模式(结构型模式)

    10. Facade 外观模式      2008-8-18 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种 ...

  2. 设计模式10: Facade 外观模式(结构型模式)

    Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...

  3. 设计模式学习之---Facade(外观)模式

    1.Facade外观模式,是一种接口型模式.这种模式的目的在于,它为子系统中的一组接口,定义了一个更高层次的接口,通过这个接口,提供一个统一的接口,使子系统更加容易使用. 2.实现:创建一个新的类,提 ...

  4. Facade外观模式

    Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.在这里我想举一个例子: ...

  5. 设计模式之Facade(外观 总管 Manager)

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

  6. php5.1 facade,php设计模式 Facade(外观模式)

    模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...

  7. 设计模式之Facade(外观)模式

    我们通过一个简单的开关电脑模拟程序来说明Facade模式(外观模式) CPU类 public class Cpu {  public void start()  {   system.out.prin ...

  8. Facade(外观模式)

    意图 为子系统中的一组接口提供一个一致的界面,_Facade_模式定义了一个高层接口,这个接口使得这一子系统更加易用. 动机 将一个系统划分成为若干个子系统有利于降低系统的复杂性.一个常见的设计目标是 ...

  9. [php]php设计模式 Facade(外观模式)

    1 <?php 2 /** 3 * 外观模式 示例 4 * 5 * 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得这一子系统更加的容易使用 6 */ 7 class SubSyt ...

  10. Facade(外观模式) 结构型

    外观模式 一.概述 1.结构 2.适用场景 3.优缺点 4.区别 二.实例 一.概述 外观模式是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接 ...

最新文章

  1. codeforces B. Eight Point Sets 解题报告
  2. OVS DPDK--数据结构关系(七)
  3. 001_ZooKeeper简介
  4. java8新特性_乐字节-Java8新特性-函数式接口
  5. c语言中英文的作用,C语言中英文对照.doc
  6. Java笔记第七篇 数据类型初了解(下,后含有循环输出a-z)
  7. 针对模拟滚动条插件(jQuery.slimscroll.js)的修改
  8. 音乐服务器 linux,在Ubuntu/Debian/CentOS上安装Koel以配置个人音乐流媒体服务器
  9. qwt的安装和移植-
  10. 对棋盘完美覆盖问题证明过程的质疑及其解决
  11. python表格模板_python 网站 使用表单和模板
  12. matlab 中文件夹下图像的批处理
  13. 完全掌握加密解密实战超级手册
  14. Portainer中文汉化
  15. matlab 怎么解ode方程,Matlab解微分方程(ODE+PDE).pdf
  16. 解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法...
  17. 骨传导耳机对听力有危害吗,骨传导耳机会不会伤害耳朵
  18. Oracle两行数据相减
  19. vant 底部导航栏 中间凸起
  20. 杰弗里·辛顿 反向传播_菲菲·李·杰弗里·塞顿和王座人工智能游戏

热门文章

  1. html中使用js将axios请求封装
  2. eureka/zookeeper/consul 三个注册中心的异同点
  3. 用javascript实现数字雨
  4. java用重载实现获取元素的数据类型
  5. css,css,javascript实现一个简单的计算器
  6. 如何避免GUIDE自动代码的Warning
  7. 第7周实践项目2.2 求解报数问题
  8. Python 基础语法(三)
  9. KMeans++算法理论和实现
  10. Python读写json文件中文编码问题