概念
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。(其实就是子系统中的类共同使用时太麻烦,客户不能每次为了完成某个功能,就写一遍调用代码,所以把代码抽象出来,封装到一个外观类的方法中)。
优点:
- 减少客户与子系统之间的耦合度。
- 客户在利用子系统实现某功能时,无需使用具体的子系统组件,只需要使用这个外观界面。
缺点:
- 不符合开闭原则,如果子系统中的一组接口发生改变,外观类也要在内部进行修改。
用例
package facade;
public class User {
public static void main(String[] args) {
Computer computer = new Computer();
computer.startup();
computer.shutdown();
}
}
class CPU {
public void startup() {
System.out.println("cpu startup!");
}
public void shutdown() {
System.out.println("cpu shutdown!");
}
}
class Disk {
public void startup() {
System.out.println("disk startup!");
}
public void shutdown() {
System.out.println("disk shutdown!");
}
}
class Memory {
public void startup() {
System.out.println("memory startup!");
}
public void shutdown() {
System.out.println("memory shutdown!");
}
}
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!");
}
}