外观模式

模式介绍

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

模式优点

1、松散耦合,外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
2、简单易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只跟门面类交互就可以了。
3、更好的划分访问层次,通过合理使用外观模式,可以帮助我们更好地划分访问的层次。

模式缺点

1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

使用场景

1、当有许多复杂的模块或子系统时,需要向外提供统一访问的模块,这时候就可以用外观模式。
2、前提是模块或者子系统相对独立。

系统建模

1、电脑开机或者关机,需要调度其他组件开或关。

系统实现

/**
 * 电脑内存
 */
public class Memory {
    private static Memory memory= new Memory();
    private Memory(){};

    public static Memory getInstance(){
        return memory;
    }

    public void open(){
        System.out.println("内存起来了!");
    }

    public void close(){
        System.out.println("内存关闭了!");
    }
}
/**
 * 电脑硬盘
 */
public class Disk {
    private static Disk disk= new Disk();
    private Disk(){};

    public static Disk getInstance(){
        return disk;
    }

    public void open(){
        System.out.println("硬盘起来了!");
    }

    public void close(){
        System.out.println("硬盘关闭了!");
    }
}
/**
 * 电脑CPU
 */
public class CPU {
    private static CPU cpu= new CPU();
    private CPU(){};

    public static CPU getInstance(){
        return cpu;
    }

    public void open(){
        System.out.println("CPU起来了!");
    }

    public void close(){
        System.out.println("CPU关闭了!");
    }
}
/**
 * 电脑门面类
 */
public class ComputerFacade {
    private CPU cpu = CPU.getInstance();
    private Memory memory = Memory.getInstance();
    private Disk disk = Disk.getInstance();

    public void openComputer() {
        disk.open();
        memory.open();
        cpu.open();
    }

    public void closeComputer() {
        disk.close();
        memory.close();
        cpu.close();
    }
}
/**
 * 客户端
 */
public class Cliant {
    public static void main (String args[]){
        ComputerFacade facade = new ComputerFacade();
        facade.openComputer();
        facade.closeComputer();
    }
}

结果:
硬盘起来了!
内存起来了!
CPU起来了!
硬盘关闭了!
内存关闭了!
CPU关闭了!
原文地址:https://www.cnblogs.com/feiqiangsheng/p/12115130.html