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

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 当新功能要用到老功能的依赖时, 建立一个清晰的接口,供外部使用
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页