外观模式
外观模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
外观模式的优缺点
优点:
- 减少了系统各部分之间的相互依赖。
- 提高了系统的灵活性。
- 由于对外部隐藏了细节,只提供一个统一访问接口,因此系统的安全性得到了保障。
缺点:
- 严重不符合设计原则中的开闭原则,如果要修改某些内容将变的非常麻烦,继承和重写都不太适用。
外观模式的结构
外观(Facade)模式包含以下主要角色。
-
外观(Facade)角色:为多个子系统对外提供一个共同的接口。
-
子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
-
客户(Client)角色:通过一个外观角色访问各个子系统的功能。
实现流程
子系统(Sub System)角色
public class CPU {
public void startup(){
System.out.println("cpu startup!");
}
public void shutdown(){
System.out.println("cpu shutdown!");
}
public class Memory {
public void startup(){
System.out.println("memory startup!");
}
public void shutdown(){
System.out.println("memory shutdown!");
}
}
public class Disk {
public void startup(){
System.out.println("disk startup!");
}
public void shutdown(){
System.out.println("disk shutdown!");
}
}
外观(Facade)角色
public class Computer {
private CPU cpu;
private Memory memory;
private Disk disk;
public Computer(){
cpu = new CPU();
memory = new Memory();
disk = new Disk();
}
public void startup(){
System.out.println("start the computer!");
cpu.startup();
memory.startup();
disk.startup();
System.out.println("start computer finished!");
}
public void shutdown(){
System.out.println("begin to close the computer!");
cpu.shutdown();
memory.shutdown();
disk.shutdown();
System.out.println("computer closed!");
}
}
客户(Client)角色
//测试
public class User {
public static void main(String[] args) {
Computer computer = new Computer();
computer.startup();
computer.shutdown();
}
}
运行结果
start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!