【Java 设计模式】接口型模式–Facade(外观)模式
Facade模式的目的在于将子系统进行更高层次的抽象,客户可以更容易的使用子系统。
举个例子:作为程序猿的我,对计算机内部的启动关闭都很了解。比如操作系统的启动关闭,CPU启动关闭,设备启动关闭都很清楚。但是女票不知道,她也没必要知道。幸好惠普,戴尔采用Facade模式生产计算机,所以女票只要知道开机键和关机键可来启动关闭计算机就行了。
示例代码
public class CPU {
public void start(){
System.out.println("cpu startup!");
}
public void shutdown(){
System.out.println("cpu shutdown!");
}
}
public class OS {
public void start(){
System.out.println("os startup!");
}
public void shutdown(){
System.out.println("os shutdown!");
}
}
public class Device {
public void start(){
System.out.println("device startup!");
}
public void shutdown(){
System.out.println("device shutdown!");
}
}
public class Computer {
private CPU cpu;
private OS os;
private Device device;
public Computer(){
cpu = new CPU();
os = new OS();
device = new Device();
}
public void startup(){
System.out.println("start the computer!");
cpu.start();
os.start();
device.start();
System.out.println("start computer finished!");
}
public void shutdown(){
System.out.println("begin to close the computer!");
cpu.shutdown();
os.shutdown();
device.shutdown();
System.out.println("computer closed!");
}
}
客户端代码
public class User {
public static void main(String[] args) {
Computer computer = new Computer();
computer.start();
computer.shutdown();
}
}
Computer其实相当于OS、CPU、Device模块的外观界面,有了这个Computer 类,那么客户端就不需要亲自调用子系统中的OS、CPU、Device模块了,也不需要知道系统内部的实现细节,甚至都不需要知道OS、CPU、Device模块的存在,客户端只需要跟Computer 类交互就好了,从而更好地实现了客户端和子系统中OS、CPU、Device模块的解耦,让客户端更容易地使用系统。