结构型 - 外观(Facade)
Chivas-Regal
# 概述
当系统存在多个子系统或复杂的类层次结构时,客户端需要与多个复杂的接口交互,学习成本较高。
外观模式就是为了完成某个目的,将复杂且微观的子系统/类交互过程,封装到一个方法内。 这样隐藏了系统的复杂性,并且降低了客户端与系统的耦合性。
简单来说,就是系统给用户提供了一个 “一键XX” 的能力。
# 实现
这里以电脑开机举例,即使有再多的硬件变化,整个开电脑的触发被整理成了一个 “开机键”。
class CPU {
public void start() {
System.out.println("CPU启动");
}
}
class Memory {
public void load() {
System.out.println("内存加载数据");
}
}
class Disk {
public void read() {
System.out.println("硬盘读取系统");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Computer {
private CPU cpu;
private Memory memory;
private Disk disk;
public Computer() {
this.cpu = new CPU();
this.memory = new Memory();
this.disk = new Disk();
}
// 一键开机
public void start() {
cpu.start();
memory.load();
disk.read();
System.out.println("电脑启动完成!");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
computer.start();
}
}
1
2
3
4
5
6
2
3
4
5
6
看起来好像外观模式就是简单的封装,其实思想差不多,只不过外观模式组织的是多个独立子系统的调用,普通封装组织的是自己的业务逻辑。