设计模式之外观者模式(facade)

原创 2018年04月16日 19:58:26
1) 是什 么 ??
将一个子系统的接口抽取成一个高层接口 , 提供一个一致的界面
好处: 
        1 , 方便调用,可以忽略子系统的其他接口
        2 , 将客户系统和子系统实现分离 , 提供子系统的独立性和可移植性
        3 , 简化子系统的依赖关系
2)为什么?
  1 , 打个比方  如果你的电脑没提供开关机按钮的话 你会怎么关机? 好吧,直接拔电源~~
        先关CPU , 再关GPU...
        其实开关机按钮就是一个向上抽取的一个高层接口 , 你想关闭什么 只需要用高层接口里面的方法去调就行~
3)怎么用?

看代码~~~
 
public class CPU {
    void turnOff() {
        System.out.println("关闭CPU");
    }
    void turnOn() {
        System.out.println("开启CPU");
    }
}
 
public class Disk {
    void turnOff() {
        System.out.println("关闭硬盘");
    }
    void turnOn() {
        System.out.println("开启硬盘");
    }
}
 
public class GPU {
    void turnOff() {
        System.out.println("关闭GPU");
    }
    void turnOn() {
        System.out.println("开启GPU");
    }
}
 
//抽取的超级接口
public class FacadeClass {
    private CPU cpu;
    private Disk disk;
    private GPU gpu;
    public FacadeClass() {
        cpu = new CPU();
        disk = new Disk();
        gpu = new GPU();
    }
    void turnOffCmp() {
        System.out.println("-----------准备开始关闭电脑----------");
        cpu.turnOff();
        disk.turnOff();
        gpu.turnOff();
        System.out.println("-----------电脑已经关闭-------------");
    }
}
客户端代码
 
public class Client {
    public static void main(String[] args) {
        //关电脑
        new FacadeClass().turnOffCmp();
    }
}
执行结果:


可以发现  你要是想要实现子类不同的功能话 你只需要定义一个超级接口 , 利用空参构造,把想要用的类定义进去就行,这样可以就超级接口里面创建方法 随意调用方法了~
执行结果
4) 在什么时候用?
1 , 系统设计初期
     可以参考我们经典的三层框架, 在每层中都可以设计一个高层接口,在三层结构之间调用可以降低耦合 也会更简单
2,开发阶段
    由于随着系统结构的不断复杂化 ,产生得类越来越多,我们就可以增加一个外观接口,减少依赖关系
3 , 维护大型项目
    利用facade 当新功能要用到老功能的依赖时, 建立一个清晰的接口,供外部使用

设计模式总结之Facade Pattern(外观模式)

Facade Pattern(外观模式) 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用性 * 当你要为一个复杂子系统...
  • cooldragon
  • cooldragon
  • 2016-08-11 00:49:57
  • 1309

浅谈JAVA设计模式之——外观模式(Facade)

一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断...
  • l1028386804
  • l1028386804
  • 2015-05-07 23:32:13
  • 3620

23种设计模式(1)-Facade设计模式

前记        曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结...
  • duchao123duchao
  • duchao123duchao
  • 2016-05-16 14:47:00
  • 5555

设计模式入门之外观者模式Facade

外观者模式:为系统外部提供一个界面 如何理解?比如:一个人想组装一台电脑,可是他并不懂太多电脑硬件的知识,所以他就没法去自己挑选硬件组装电脑,但是他可以通过电脑城(即外观者)帮他挑选硬件最终组成电脑。...
  • IamMaking
  • IamMaking
  • 2014-03-29 22:58:36
  • 531

一天学习两个设计模式之Facade模式(外观模式,结构型模式)

一天学习两个设计模式之Facade模式(外观模式,结构型模式)
  • Dax1n
  • Dax1n
  • 2017-05-03 19:36:58
  • 983

C# 设计模式--外观模式(Facade)

     一个良好的面向对象应用程序应该是一个最小的类,这个类能够把其他可重用类的行为有效的组织起来。对一个子系统的类进行重构,直到每个类都有一个进行良好定义功能目标,所以代码易于维护。外观模式(Fa...
  • scucj
  • scucj
  • 2006-11-09 00:22:00
  • 3293

C++外观模式详解--设计模式(11)

Facade模式产生原因:        老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种...
  • fanyun_01
  • fanyun_01
  • 2016-06-29 08:57:54
  • 1465

pureMVC与设计模式之二. Facade模式与Singleton模式

引言 上篇文章,我们分析了pureMVC的结构以及工作流。从本文开始,将逐个解剖其中设计到的设计模式。我们先看facade模式和singleton模式。 一、pureMVC中的Facade模式...
  • ywjun0919
  • ywjun0919
  • 2015-05-05 10:04:42
  • 604

JAVA设计模式十九--Facade(外观模式)

Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。 Facade模式概述         实际应用中,我们在对付一些老旧...
  • hfmbook
  • hfmbook
  • 2012-06-29 15:25:41
  • 18945

[设计模式]Facade外观模式

问题 举一个生活中的小例子,大凡开个学或毕过业的都会体会到这样一种郁闷:你要去n个地方办理n个手续。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的,到什么地方办理我们都不...
  • ouyangshima
  • ouyangshima
  • 2013-01-09 20:14:39
  • 1208
收藏助手
不良信息举报
您举报文章:设计模式之外观者模式(facade)
举报原因:
原因补充:

(最多只允许输入30个字)