Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

本文介绍设计模式中的外观(Facade)模式的概念,用法,以及实际应用中怎么样使用Facade模式进行开发。

Facade模式的概念

Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

在应用系统中,为了实现某具有复杂功能的模块或子系统等时,往往需要为其设计和实现很多很小的类,也就是说,该模块或子系统是由一组具有类似功能的类群组合而成。这样一来,怎么调用这些类就成了问题。Facade就是这样一种模式,设计一个被称为facade的类,该类提供一个简单的调用接口:
- 隐藏具体的实现细节,简化调用关系。
- 使得调用方的代码更加简洁明了。
- 通过facade,降低外部调用类与内部被调用类间的耦合程度。
- 可以为每个不同的任务需要,准备经过良好设计的简易的API。

Facade模式可以用下面的类图来表示:

[出自:维基百科wikipedia.org]

Facade
    为调用方定义简单的调用接口。
Clients
    调用者。通过Facade接口调用提供某功能的内部类群。
Packages
    功能提供者。指提供功能的类群(模块或子系统)。

Facade模式与Adapter模式的区别

Facade模式与Adapter模式存在着相当的相似之处:为即存的类提供界面统一的接口,以供外部类调用。
但Facade模式的目的是简化调用关系;Adapter模式是为不同的模块/子系统提供一个统一的接口(支持多态),旨在将一个或多个已经存在的不统一的接口转化成为另一个统一的接口。
举例说明:
1,Adapter模式:
有银行A系统,银行B系统,它们具有大致一样的功能,但它们的对外接口各不一样。
如果需要在C系统中使用A系统或B系统,为了接口的一致,我们需要在C系统中实现一个Adapter,通过这个Adapter提供的接口,我们就可以透明的调用银行A系统的功能、或者银行B系统的功能了;
2,Facade模式:
有银行A系统,它具有非常复杂的功能,有融资,贷款,存款,取款,信用审查,担保等等功能,
如果需要在C系统中,只需用到A系统的一部分功能,比如融资,我们就可以为需要用到的融资功能封装一个Facade,通过这个facade,我们不用管A系统的内部是怎么实现融资业务的,也不用管信用审查是否通过,是否具有充分的担保资源等等,大大简化了客户端的调用。

Facade模式的模型:

A系统有A1, A2, A3等类。客户端需要调用A系统的的A1.doSomething1();A2.doSomething2();A3.doSomething3()来完成某功能。
Facade模式的实现模型就是:

A系统:

class A1 {
    public void doSomething1();
}

class A2 {
    public void doSomething2();
}

class A3 {
    public void doSomething3();
}

Facade:
public class Facade {
    public void doSomething() {
        A 1 a 1 = new A1();
        A 1 a 2 = new A2();
        A 1 a 3 = new A3();

a1.doSomething1();
        a2.doSomething2();
        a3.doSomething3();
    }
}

Test:
public class Client {
    public static void main(String []args) {
        Facade facade = new Facade();
        facade.doSomething();
    }
}

设计模式之Facade相关推荐

  1. facade java_Java设计模式之Facade模式

    Java设计模式之Facade模式  GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...

  2. 门面设计模式(facade)

    门面设计模式(facade) 这个贼鸡儿简单,快看两眼,这是我介绍的最后两个设计模式了!坚持,成功一定是属于你的! 这个设计模式叫个啥?门面设计模式??这又是什么玩意(消音ing),好了好了我举个例子 ...

  3. 胖虎白话学习设计模式之外观设计模式(Facade)

    胖虎白话学习设计模式之外观设计模式(Facade) 记录胖虎学习设计模式过程,不许勿喷,转载请注明出处! http://blog.csdn.net/ljphhj 1.存在问题 开发中我们经常会遇到一种 ...

  4. 设计模式--门面(Facade)模式

    模式定义 为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更加容易使用(复用) 类图 应用场景 1.当你需要使用复杂子系统的有限但直接的接口时 ...

  5. 设计模式:Facade模式

    Facade模式--简单窗口 当调用大型程序进行处理时,我们需要格外注意那些数量庞大的类之间错综复杂的关系.不过有一种更简单的做法,就是为这个大型程序提供一个"窗口".这样,我们就 ...

  6. 设计模式解析(五)——几种设计模式之Facade和Adapter

    由于个人时间原因,无法详细描述这些模式,暂且记录下来以后慢慢补充详细. Facade模式 Facade模式:关键特征   意图 希望简化原有系统的使用方式.需要定义自己的接口. 问题 只需使用某个复杂 ...

  7. 设计模式之facade模式

    从理论上讲facade模式,就是在系统中一个对象需要调用某些相似的功能,而将这些相似的功能进行封装,而留给需要调用的对象一个接口,这个接口不是我们编程意义上的接口,实际可以是一个接口,或者一个类.供调 ...

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

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

  9. Java 设计模式之Facade门面模式

    场景:当外界某个对象与某个系统内的多个组件都要进行交互时,这个系统可以对外提供一个统一的接口,与外界这个对象对接,这样可以对外隐藏系统内部的复杂性,接口内部调用各个组件功能. 实现:定义一个Facad ...

最新文章

  1. 多个tab可以组成一个表单吗 js_11个表单设计小技巧
  2. Getting Started with OpenCV
  3. Redis进阶 - 因异常断电导致的Redis Cluster Fail故障处理
  4. MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
  5. android SharedPreferences的用法
  6. flask渲染图像_用于图像推荐的Flask应用
  7. 「知识点」JavaScript 中11个有趣的事实
  8. python request timeout_详解Python requests 超时和重试的方法
  9. kali怎么进入root用户_ubuntu系统密码忘了怎么办(root或一般用户)
  10. 51.RNN训练难题--梯度弥散与梯度爆炸、详解机器学习中的梯度消失、爆炸原因及其解决方法;RNN网络的梯度推导公式(学习笔记,学习整理)
  11. ECMAScript6 Proxy和Reflect 对象操作拦截以及自定义
  12. 无法启动程序,.dll不是有效的Win32应用程序
  13. 用Java写一个年薪计算器,助你简单完成大量税前税后总薪计算量
  14. vs2015 x86的Qt项目迁移到vs2017 x64平台
  15. python geometry参数_python arcgis Geometry | 学步园
  16. LCM/OLED模组点灯检测设备
  17. 计算机软件技术专业毕业论文,软件技术专业毕业论文.doc
  18. 海底捞管理方法的调研报告
  19. 招行信用卡笔试题:卡中心美食家
  20. 前端通用埋点工具web-hunter

热门文章

  1. Linux之阻塞与非阻塞IO
  2. JavaScript摘录(二)
  3. 性能测试能力提升-JVM GC原理
  4. nacative mysql_分析996个词根在各大考纲词汇中的作用(二)
  5. 07-PDI(Kettle)源码编译8.2.0.0.R版本
  6. 重叠社区检测基础算法
  7. DOS命令篇(find 和 findstr)
  8. 《关于我摸鱼一天后搞定PyCharm这档事》Python环境配置
  9. 关于whl,你想知道的
  10. C语言--“.”与“-”有什么区别?