概括

名称

Facade

结构

动机

为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

适用性

  • 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。F a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f a c a d e 层。

  • 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入f a c a d e 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

  • 当你需要构建一个层次结构的子系统时,使用f a c a d e 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过f a c a d e 进行通讯,从而简化了它们之间的依赖关系。

解析

形象比喻:

我有一个专业的Nikon 相机, 我就喜欢自己手动调光圈、快门, 这样照出来的照片才专业, 但MM不懂这些, 教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就可以了,一切有相机自动调整,这样MM也可以用这个相机给我拍张照片了。

一言以蔽之,就是提供一个简单的高层调用接口。

实例

对于一件电子产品来说, 有软件的生产,硬件的生产 和软硬件结合等部分。

现在我需要调用一个方法,直接生产产品。

这里有三个文件:

Product.java    -- 产品的类,

ProductFacadeImpl.java   -- 产品的门面类

TestMain.java -- 测试类

/**   * @author oscar999   * @date 2013-7-29* @version V1.0   */
package designptn.facade;public class Product {public void product_soft() {System.out.println("Product Software");}public void product_hard() {System.out.println("Product Hardware");}public void integrate() {System.out.println("Integrate Software and Hardware");}
}
/**   * @author oscar999   * @date 2013-7-29* @version V1.0   */
package designptn.facade;public class ProductFacadeImpl {public void product(Product product) {product.product_soft();product.product_hard();product.integrate();}
}
/**   * @author oscar999   * @date 2013-7-29* @version V1.0   */
package designptn.facade;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProductFacadeImpl productFacade = new ProductFacadeImpl();productFacade.product(new Product());}}

[设计模式-结构型]外观模式(Facade)相关推荐

  1. 【设计模式_青春版】结构型|外观模式

    文章目录 外观模式(结构型) 外观模式又名门面模式 结构 外观模式案例 代码实现 优缺点 优点 缺点 使用场景 在tomcat中的 外观模式(结构型) 外观模式又名门面模式 是一种通过为多个复杂的子系 ...

  2. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  3. Java设计模式-结构型-门面模式

    目录 前言 示例 前言 门面模式(也叫外观模式,Facade Pattern)在许多源码中有使用,比如 slf4j 就可以理解为是门面模式的应用.这是一个简单的设计模式,我们直接上代码再说吧. 示例 ...

  4. 《研磨设计模式》chap3 外观模式Facade

    1. 场景1 客户自己装机,需要一一去买配件:cpu.主板... 找专业的公司,由公司去处理: 2. 场景2 代码生成工具有4个模块 client使用时依次创建3个对象 public class Cl ...

  5. [结构型] -- 外观模式

    外观模式的提出: 为复杂的子系统调用提供一个统一的入口,使子系统与客户的耦合度降低,且客户端调用非常方便. 就像在网站浏览时,开发者为我们设定的主页一样.这样我们就无需去记住所有的子网页的URL,只需 ...

  6. 设计模式之【外观模式-Facade】

    外观模式(Facade) 外观模式是为了解决类与类之家的依赖关系的 像spring一样,可以将类和类之间的关系配置到配置文件中 而外观模式就是将他们的关系放在一个Facade类中 降低了类类之间的耦合 ...

  7. 设计模式之略见一斑(外观模式Facade)

    外观模式又称门面模式,它是为了给子系统中提供一个一致的界面,从面定义了一个高层接口 ,这个接口使得这一子系统更加容易使用.定义中提到的子系统指在设计中为了降低复杂性根据一定的规则,对系统进行的划分,子 ...

  8. 设计模式之八:外观模式(Facade)

    外观模式: 为子系统中的一系列接口提供了一个统一的界面.外观模式定义了一个高层次的接口以使子系统更加easy使用. Provide a unified interface to a set of in ...

  9. [设计模式-结构型]代理模式(Proxy)

    概括 名称 Proxy 结构 动机 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P ...

最新文章

  1. 即将 50 岁的雷军,重新回到手机战场
  2. idea与mysql连接时,遇见的小问题
  3. WebPart(汇总)[转载]
  4. HDFS EditsLog和FsImage日志机制
  5. ZigBee技术的应用和优势
  6. 学习笔记-java编程-交通灯管理器设计流程。
  7. vue 指令 v-on
  8. 程序员破解推荐系统瓶颈,带来超百亿收入增量!
  9. 在vue中,如何禁止回退上一步,路由不存历史记录
  10. 十一种值得女生交往的男生
  11. php php-fpm安装 nginx配置php
  12. 计算机网络技术毕业生实习报告_20XX计算机网络技术毕业生实习报告1000字
  13. 135行实现CRUD功能(PHP)
  14. 机器学习之One-Hot Encoding详解
  15. 坚持学下去!转行程序员的2020年度总结
  16. All clients has disconnected from. You can graceful shutdown now., dubbo version: , current host
  17. 解决gns3连接不上本地的几种情况
  18. Machine Learning Basics(2)
  19. IRQL深入解析(3)--与IRQ比较
  20. GitLab复习资料整理

热门文章

  1. 解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0
  2. javascript控制开始日期,和结束日期在同一个月
  3. Ubuntu 14.10 下安装java反编译工具 jd-gui
  4. 牙龈出血试试四个食疗方_新闻中心_新浪网
  5. 关于用户自定义控件与引用该控件的页面之间的javascript脚本冲突
  6. Several ports (8080, 8009) required by Tomcat v9.0 Server at localhost are already in use.解决方案
  7. Sonarqube plugin插件 在使用Sonar-scanner时不能 扫描 file index 动态新生成的文件 解决方案
  8. 算法达人看过来!你一展身手的好机会来了!
  9. Python自然语言处理------分类和标注词汇
  10. java栈和队列_栈和队列的面试题Java