一:定义

提供一个统一的接口代表子系统内部的一组接口。门面模式提供一个高层的接口,使得子系统更易于使用。

 

二:经验

2.1 window系统的软关机(不是直接断电)是一个过程, 它自己背后会做很多事情,例如关闭窗口、保存未保存的文件和关闭电源等等。但是我们只管点击一个关机按钮,系统底下做些什么和以什么顺序执行我们不需要知道,这里的关机按钮就是一个门面。

2.2 我们经常去政府部门办理一些业务, 通常有一个服务窗口接待我们, 我们准备好一些资料交付给服务窗口然后等待处理结果。至于实际我们的资料要经过多少个部门处理、处理的顺序是怎样的我们不需要了解, 这里的服务窗口就是这个业务的一个门面。

 

三:结构

这里的子系统复杂程度随实际情况变化,所以图中的子系统部分只是在表述一种概念而已。

四:优缺点

优点:

  • 减少系统的相互依赖   客户只与门面交互
  • 提高灵活性   封装子系统这一变化部分,只提供门面这一很少会变化的对象
  • 提高安全性   客户无法直接接触子系统

缺点:

    不符合开闭原则。所以设计时要考虑情况,如果门面改变的概率比较大的话就要谨慎使用门面模式。

门面模式(Facade)的更多相关文章

  1. 说说设计模式~门面模式(Facade)

    返回目录 门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点. 定义 门面模式,是指提供一个统一的接口去访问多个子系统的 ...

  2. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式   意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统 ...

  3. Tomcat源代码-门面模式(Facade)

    从Tomcat源码提炼出设计模式-门面设计模式: 概念 外部访问内部,耦合度增加,不利于扩展.而门面模式在内部基础上进行再度封装,只提供外部想要的方法.这时访问方式由“外部---内部”变为了“外部-- ...

  4. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)

    一,总体概要 1,笔者浅谈 说起“门面”这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, function Employee(n ...

  5. c++ 门面模式(Facade)

    门面模式是比较常用的一种设计模式,我们可能在无意中就会使用,门面模式就是用一个门面类来处理子系统的复杂关系,门面类简单的Api接口供客户端调用.用一个简单的演播室来表示. #include <i ...

  6. 学习笔记——门面模式Facade

    门面模式,其实在我们不经意间已经使用了此设计模式.当我们需要将两个子系统,合并对外提供一个大的接口时,我们使用的就是门面模式.对外,子系统的接口是不可见的,只有我们的门面在.

  7. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  8. php门面模式(facade pattern)

    书上不全的代码,我自己补全的. <?php /* The facade pattern is used when we want to simplify the complexities of ...

  9. 门面模式(Facade)解析

    门面模式使用一个门面类来包装一些复杂的类,对外提供一个简单的访问方法. 见如下代码: class CPU { public void startup() { System.out.println(&q ...

  10. JavaScript设计模式(6)-门面模式

    门面模式 门面模式(Facade Pattern):他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接 ...

随机推荐

  1. 基于scrapy-redis组件的分布式爬虫

    scrapy-redis组件安装 分布式实现流程 scrapy-redis组件安装 - 下载scrapy-redis组件:pip install scrapy-redis - 更改redis配置文件: ...

  2. 免费获取Bootstrap模板的方法

    Bootstrap是Twitter推出的一个开源的用于前端开发的工具包,其中中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮.功能完备的网站. 最近通过了Bootstrap中文网学习了其 ...

  3. javascript实现双击网页自动滚动,单击滚动停止

    当网页中有长篇文章时,浏览起来就比较吃劲了,想想一边忙着拖动滚动条,一边忙着浏览,确实挺累人的.为了客人能够轻松的浏览,我们可以使用script代码实现网页的自动滚屏,当双击网页的时候,网页将会自动向 ...

  4. 更改 AVD 默认存放位置

    AVD Manager 创建的 Android 模拟器(AVD)默认存放位置为C:\Users\<user>\.android\avd,我创建了2个AVD,一共用了近9G!是要挪挪地方了. ...

  5. LCA 离线的Tarjan算法 poj1330 hdu2586

    LCA问题有好几种做法,用到(tarjan)图拉算法的就有3种.具体可以看邝斌的博客.http://www.cnblogs.com/kuangbin/category/415390.html 几天的学 ...

  6. Goldengate升级之目标端(replicat端)升级

    转自红黑联盟Goldengate升级之目标端(replicat端升级 要升级replicat端的原因为:目标端OGG软件版本与源端OGG软件版本不同,在实际生产应用中,经常发现replicat端事务丢 ...

  7. 模拟试题B

    模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...

  8. Block Functionality

    Block Functionality A block is an anonymous inline collection of code that: Has a typed argument lis ...

  9. JS 用+1、-1填12()34()56()78()9=59

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. PHP迭代器的内部执行过程

    下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理.先来看一个官方的例子: class myIterator implements Iterator { private ...