定义:为子系统中的一组接口提供一个一致的界面。定义一个高层接口,使得这一子系统更加容易使用。
使用场景:子系统交互复杂,建立外观模式可以屏蔽系统间的通信实现,客户端调用简单、透明。
结构:
外观(Facade)角色:被客户端调用,可以访问各子系统的功能。
子系统(SubSystem)角色:实现子系统的功能,处理Facade指派的任务。
客户端(Client)角色:调用外观角色获得相应的功能。
优点:
1、子系统间不必直接跟客户端进行通信交互,减少耦合。
2、客户端通过外观角色直接跟子系统进行交互,对子系统间的通信是透明的。
这里以电脑(简单分为cpu、内存、硬盘)为例子,写一个外观模式的应用。
外观角色类
public class Computer {
private Cpu cpu = null;
private Memory memory = null;
private HardDrive hardDrive = null;
public Computer(){
cpu = new Cpu();
memory = new Memory();
hardDrive = new HardDrive();
}
public void start(){
this.cpu.execute();
this.memory.execute();
this.hardDrive.execute();
}
}
子系统类
public class Cpu {
public void execute(){
System.out.println("CPU就绪!");
}
}
public class Memory {
public void execute(){
System.out.println("内存加载就绪!");
}
}
public class HardDrive {
public void execute(){
System.out.println("硬盘加载就绪!");
}
}
客户端类
public class Client {
public static void main(String[] args){
Computer computer = new Computer();
computer.start();
}
}