【返回目录】

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

飞机内部有众多的子系统,假如你有机会进入飞机内部(不是指客舱)看看,你就会看到数不清的各种线路,这些线路连接着各种子系统,并且子系统之间的干扰并不多(否则飞机很容易失控),但是尽管飞行员是经历了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. 第二篇:mysql_____sql语句语法格式
  2. C#泛型委托,匿名方法,匿名类
  3. Michael-Scott非阻塞队列(lock-free)算法的C实现
  4. 介绍一个 Windows 10 资源管理器的替代工具 - Explorer++
  5. Java 9和Project Jigsaw如何破坏您的代码
  6. 终于学会上传图片了\( ̄︶ ̄*\))
  7. python爬虫程序requests采用get和post方式
  8. 非常详尽的 Shiro 架构解析
  9. RabbitMQ入门学习系列(四) 发布订阅模式
  10. 容器编排技术 -- Kubernetes Service
  11. 分布式事务之TCC服务设计和实现注意事项!
  12. winform DataGridView的虚模式填充,CellValueNeeded事件的触发条件
  13. xml转excel(Office XML转excel)
  14. [Extjs6]随记 store本地过滤数据显示
  15. C# WPF做的漂亮的登陆界面[附源码]
  16. hello Java 第一天的认识
  17. OpenRisc-27-wishbone接口的vga ipcore的分析与仿真
  18. 【设计模式】策略模式
  19. python计算FID
  20. 制作往图片里插入视频,视频添加到图片上播放

热门文章

  1. 算法导论之图的最小生成树
  2. Python入门IDE选择
  3. 线程池的几个重要参数?—— 七大参数
  4. 会话技术 —— Cookie 实现原理 || 在idea编辑器中设置代码的模板
  5. 学习:二维码、QR码、J4L-QRCode、java
  6. CC2541对AT24CXX系列存储器的支持
  7. 字符流中第一个不重复的字符
  8. opencv中使用K-近邻分类算法KNN
  9. 有关函数模板和类模板的说法
  10. 【一行命令】ubuntu 16.04 LTS安装pip3