美文网首页
理解外观模式

理解外观模式

作者: 梦的飞翔_862e | 来源:发表于2018-11-27 12:17 被阅读0次
概念理解

外观模式实际上是将系统内部逻辑与客户端调用隔离开,无论系统内部多么复杂, 仅仅暴露出来非常简单的几个接口供客户端调用。外观模式是一种结构型模式。

外观模式的结构

考虑一个电脑开关的例子,电脑提供出来的接口是一个打开按钮和一个关闭按钮,至于打开电脑后电脑做什么操作,客户是不知道也不需要关心。


代码实例
public class Cpu {

    private static final Cpu CPU_INSTANCE= new Cpu();
    private Cpu(){
    }
    public static Cpu getCpuInstance(){
        return CPU_INSTANCE;
    }
    public void start(){
        System.out.println("cpu started");
    }
    public void shutdown(){
        System.out.println("cpu is shutdown");
    }
}
public class Disk {

    private static final Disk DISK_INSTANCE= new Disk();
    private Disk(){

    }
    public static Disk getDiskInstance(){
        return DISK_INSTANCE;
    }
    public void start(){
        System.out.println("Disk started");
    }
    public void shutdown(){
        System.out.println("Disk is shutdown");
    }
}
public class Memory {

    private static final Memory MEMORY_INSTANCE= new Memory();
    private Memory(){

    }
    public static Memory getMemoryInstance(){
        return MEMORY_INSTANCE;
    }
    public void start(){
        System.out.println("Memory started");
    }
    public void shutdown(){
        System.out.println("Memory is shutdown");
    }
}
public class ComputerFacade {
    private Cpu cpu;
    private Memory memory;
    private Disk disk;

    public ComputerFacade() {
        cpu = Cpu.getCpuInstance();
        disk = Disk.getDiskInstance();
        memory = Memory.getMemoryInstance();

    }

    public void startCompute() {
        memory.start();
        cpu.start();
        disk.start();
    }

    public void shutdownCompute() {
        memory.shutdown();
        cpu.shutdown();
        disk.shutdown();
    }
}
public class App 
{
    public static void main( String[] args )
    {
      ComputerFacade facade = new ComputerFacade();
      facade.startCompute();
    }
}
最小知识原则

外观模式的设计,遵循的是最小知识原则。最小知识原则的简单理解是,一个类只与直接依赖的类通信。直接依赖的类包括成员和方法参数,不包括局部变量。
遵循最小知识原则的方法应该调用:
对象本身
对象的任何组件
作为方法参数传递进来的对象
该方法创建或者实例化的对象

由此可见,应该避免调用由其他方法返回回来的对象

优点:外观模式减少了客户端和系统的耦合度,提高了安全性和灵活性
缺点:外观模式系统内部的设计不符合开闭原则。

代码源码见https://github.com/jxl198/designPattern/tree/master/facade

相关文章

网友评论

      本文标题:理解外观模式

      本文链接:https://www.haomeiwen.com/subject/meqgqqtx.html