文档章节

Facade模式

mac_zhao
 mac_zhao
发布于 2015/02/25 11:17
字数 567
阅读 15
收藏 0
Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。  

 

  就如同医院的接待员一样,Facade模式的Facade类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与Facade对象打交道,而不需要与子系统内部的很多对象打交道。   

 


观察者模式的结构

 

  

 

 

 Facade的几个要点

  从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Façade接口的变化。  

 

   Façade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Façade很多时候更是一种架构设计模式。 


 

   Façade设计模式并非一个集装箱,可以任意地放进任何多个对象。Façade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合。  


 

   注意区分Façade模式、Adapter模式、Bridge模式与Decorator模式。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。


 



 

适用性

 

  1.为一个复杂子系统提供一个简单接口。

 

  2.提高子系统的独立性。

 

  3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

 

 

 

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() {
        A1 a1 = new A1();
        A1 a2 = new A2();
        A1 a3 = new A3();

 

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

 


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

© 著作权归作者所有

共有 人打赏支持
mac_zhao
粉丝 41
博文 249
码字总数 304671
作品 0
普陀
程序员
Facade模式[fəˈsɑːd]

Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。   就如同医院的接待员一样,Facade模式的Fac...

凯文加内特
2015/04/23
0
0
结构型模式:Facade 外观模式

结构型模式:Facade 外观模式 1、系统的复杂度 1)假设我们需要开发一个坦克模拟系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。 //...

flyhighly
2011/04/24
0
0
【白话设计模式二】外观模式(Facade)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/02/15
590
1
Nutz设计模式之Facade模式应用讲解

Facade模式是最常用的一个模式, 并且大多数时候我们都是无意识的使用这个模式. 以Java Web中的Service为例, 它内部封装了一个或者多个Dao来进行业务逻辑, 而我们只需要使用Service提供的接口...

l5072061的博客
2017/12/13
0
0
Web中的积累:外观模式 Facade

Web中的积累:外观模式 Facade 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 壹 前言 目测好久没写文章了,距离上一篇文章也有二十多天。我...

泥沙砖瓦浆木匠
2014/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么 vue 默认导出的是 vue.common.js,它和 vue.js 的区别在哪里,又有什么关系?

这个问题在囧克斯的博客中有提到。 Vue 最早会打包生成三个文件,一个是 runtime only 的文件 vue.common.js,一个是 compiler only 的文件 compiler.js,一个是 runtime + compiler 的文件 ...

粒子数反转
9分钟前
0
0
php正则表达式替换图片地址

<?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"><br />PHP正则提取或更改图片img标记中的任意属性<......

mdoo
13分钟前
0
0
一个简单的系统监控脚本

一个简单的系统信息监控脚本 #!/bin/bash# DATE:20181018# System monitor by Kxvzinterval=5while :doecho '==========================================================...

Kxvz
16分钟前
0
0
七牛云助你度寒冬 | 每天 10:24, 新用户抢全额免单

近年来,中美贸易战、股市暴跌、房地产变天、人民币贬值等等,企业艰难生存于冰川夹缝之中,融资发展难上加难。 凛冬将至, 七牛云特此推出免单好礼,为新用户(2018 年 10 月 10 日后新注册...

七牛云
17分钟前
0
0
Echarts X轴刻度标签换行显示

xAxis: [ { 'type':'category', splitLine: {show: false}, axisLabel: { show: true,//是否显示 interval:0,//强制显示 ......

郭周园
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部