一、描述
为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
角色
(1)子系统类:实现该子系统功能。
(2)外观类:包含各个子系统的功能,为多个子系统对外提供统一接口。
(3)客户类:访问外观类的统一接口
二、优点
(1)减少系统依赖,降低客户端调用系统难度。
(2)提高灵活性
(3)提高安全性
三、缺点
(1)外观类关联太多复杂子系统类耦合度太高,并且扩展子系统需要修改相关联的外观类,不符合开闭原则。
四、使用场景
(1)为复杂的模块或子系统提供外界访问的模块
(2)子系统相对独立
五、示例
以电脑开机步骤为例,参考[网上文章],我总结了以下几个步骤(https://www.cnblogs.com/Braveliu/p/3305975.html)
(1)电源供电
(2)CPU执行指令,跳转到BIOS
(3)BIOS进行加电自检,初始化,显示启动画面,启动系统
代码
1.电源
public class Power {
public void work(){
System.out.println("电源供电");
}
}
2.CPU
public class CPU {
public void work(){
System.out.println("CPU执行命令");
}
}
3.Power
public class Power {
public void work(){
System.out.println("电源供电");
}
}
4.BIOS
public class BIOS {
public void work(){
System.out.println("加电自检");
System.out.println("初始化");
System.out.println("显示启动画面");
System.out.println("启动系统");
}
}
5.Computer(电脑)
集成上面的部件
public class Computer {
private Power power;
private CPU cpu;
private BIOS bios;
public Computer() {
this.power = new Power();
this.cpu = new CPU();
this.bios = new BIOS();
}
public void start() {
System.out.println("开始启动电脑:");
power.work();
cpu.work();
bios.work();
}
}
6.Client(客户端)
启动系统
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
computer.start();
}
}
效果: