定义

为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得子系统更加容易使用。
案例
比如现在有一个文件系统,它有很多的类,例如File,Directory,InputStream,OutputStream,ByteStream, NetworkAccess,Convertor等等,用这些类可以对文件进行打开,保存和转换,既可以在本地运行,也可以辅助NetworkAccess进行网络的存储和读取。用户在使用的时候不需要关系底层的实现,他只需要一个接口,提供了所需要的功能即可:
   
  1. class File {
  2. public:
  3. const string& fileName() const;
  4. ByteStream* data() const;
  5. }
  6. class NetworkAccess {
  7. public:
  8. void post(string url, ByteData* data);
  9. ByteData* get(string url);
  10. }
根据这两个类就可以进行相关的操作:
   
  1. class NetworkFile {
  2. public:
  3. void saveFile(string url, string path);
  4. File* loadFile(string url);
  5. }
  6. void NetworkFile::saveFile(string url, string path) {
  7. Inputstream is(path);
  8. NetworkAccess networkAccess;
  9. networkAccess.put(url, is);
  10. }
  11. File* NetworkFile::loadFile(string url) {
  12. NetworkAccess networkAccess;
  13. ByteStream* data = networkAccess.get(url);
  14. File* file = new File();
  15. file.setName(getNameFromUrl(url));
  16. file.setData(data);
  17. return file;
  18. }
适用性
  • 当要为一个复杂的子系统提供一个简单的单接口时
  • 为了让客户程序与实现之间不存在依赖性
  • 当需要构建一个层次结构的子系统时,用Facade为每一层子系统定义一个入口点
优缺点
  1. Facade对用户屏蔽了子系统的组件,使用起来更方便。
  2. 降低了耦合度。
  3. 如果应用需要,可以直接使用子系统的类。

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. php5.1 facade,php设计模式 Facade(外观模式)

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

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

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

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

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

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

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

  9. 浅谈Facade外观模式

    一. 基本概念 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多 ...

  10. C#设计模式系列 9 ----Facade外观模式之--天河城购物

    1.理论定义 外观模式   把  分散的子系统,集合成一个系统,提供一站式服务. 2.应用举例 需求描述: 聂小倩 和 宁采臣是一对小富则安 的聊斋夫妻.住在比较偏远的小乡村. 今天,两人初次来到大城 ...

最新文章

  1. 20个经典要诀学好英语
  2. Java中的多态(for myself)
  3. 比特币现金仍然是一个比较好的投资
  4. HTML form 标签的 action 属性
  5. 总结Java访问权限
  6. 深度学习之循环神经网络(10)GRU简介
  7. 【英语学习】【WOTD】mettlesome 释义/词源/示例
  8. 【Spark】Spark Class is not registered joins UnsafeHashedRelation kryo
  9. dump排查内存异常 java_如何排查Java应用内存泄漏问题
  10. 集合和Iterator迭代器
  11. WM下“从用户数据存储中检索信息时出错。未找到平台。”解决方案
  12. php环境配置PHPWAMP
  13. 小样本条件下工业无损检测X光图像
  14. 思科Cisco Nexus 9508交换机的QSFP+端口高速线缆DAC布线方案
  15. 保证接口数据安全的10种方案
  16. MT6573芯片资料集锦MT6575入门手册 V0.2
  17. Summits poj3503
  18. 大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目
  19. 智齿徐懿 | 一个“外行”眼中的呼叫中心系统未来
  20. 第四百三十五章 灭龙魔宫

热门文章

  1. Mysql数据库查询去除重复_mysql数据库如何去重复数据
  2. English Learning - L2 语音作业打卡 复习双元音 [eɪ] [aɪ] [aʊ] [əʊ] [ɔɪ] [ɪə] [ʊə] [eə] Day39 2023.3.31 周五
  3. Jeesite 4.0 学习笔记
  4. html响应式页面源码,关于响应式页面
  5. sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
  6. js及jQuery移除html元素所有的class
  7. 电路的基本概念和分析方法
  8. 关于有偿提供拼图响应式后台的通知
  9. Android 微博登录
  10. R语言--计算各种距离