Facade Pattern 外观模式

外观模式隐藏了系统的复杂性,并向客户端提供了一个访问系统的接口,该接口更加简单,并且易于使用。

Facade中的角色

  1. 门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
  2. 子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。
  3. 客户角色:通过调用Facede来完成要实现的功能。

Facade的实现

Facade

  • 分析
    • 对于用户来说,我们想使用所有的子系统,但是内部太为复杂,并不易于我们使用。
    • 我们将子系统封装到Computer这个门面类中,隐藏子系统的具体实现。
    • 子系统对于用户是隐藏的,我们只需要调用门面类即可实现对子系统的调用。并且子系统的统筹配合是由Computer决定的。
  1. 子系统(CPU, Disk, Memory)
    public class CPU {
     public void start(){
         System.out.println("CPU is starting...");
     }
     public void shutdown(){
         System.out.println("CPU shutdown...");
     }
    }
    public class Disk {
     public void start(){
         System.out.println("Disk is starting...");
     }
     public void shutdown(){
         System.out.println("Disk is shutdown...");
     }
    }
    public class Memory {
     public void start(){
         System.out.println("Memory is starting...");
     }
     public void shutdown(){
         System.out.println("Memory is shutdown...");
     }
    }
    
  2. 创建一个门面类,用于集成所有的子系统
    public class Computer {
     private final CPU cpu;
     private final Memory memory;
     private final Disk disk;
     public Computer(){	//创建了一个门面类,在门面类中定义各个子对象的实例。
         this.cpu = new CPU();
         this.disk = new Disk();
         this.memory = new Memory();
     }
     public void start(){	//在宏观调用中,我们统筹控制了所有的子系统,决定了使用的顺序,让复杂的子系统业务按照顺序执行。
         this.cpu.start();
         this.disk.start();
         this.memory.start();
         System.out.println("Computer is starting...");
     }
     public void shutdown(){
         this.cpu.shutdown();
         this.disk.shutdown();
         this.memory.shutdown();
         System.out.println("Computer is shutdown...");
     }
     public static void main(String[] args) {
         Computer computer = new Computer();
         computer.start();	//用户不需要对子系统进行使用,只需要操作门面类。
         System.out.println("===================");
         computer.shutdown();
     }
    }
    CPU is starting...
    Disk is starting...
    Memory is starting...
    Computer is starting...
    ===================
    CPU shutdown...
    Disk is shutdown...
    Memory is shutdown...