设计模式笔记:外观模式

概述

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更容易使用

例如,一键启动。想象一下你的电脑和它的启动过程。启动电脑不仅仅是按下电源按钮,实际上在背后,它包含了启动操作系统,加载用户配置等一系列复杂的步骤。但对于用户来说,他们只需要按下电源按钮就可以了,这其实就是外观模式的一个例子。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>

class SubsystemA {
public:
void operationA() const {
std::cout << "Subsystem A, Method A\n";
}
};

class SubsystemB {
public:
void operationB() const {
std::cout << "Subsystem B, Method B\n";
}
};

class SubsystemC {
public:
void operationC() const {
std::cout << "Subsystem C, Method C\n";
}
};

// Facade
class Facade {
protected:
SubsystemA* subsystemA;
SubsystemB* subsystemB;
SubsystemC* subsystemC;
public:
Facade() {
subsystemA = new SubsystemA();
subsystemB = new SubsystemB();
subsystemC = new SubsystemC();
}
~Facade() {
delete subsystemA;
delete subsystemB;
delete subsystemC;
}
void operation() {
subsystemA->operationA();
subsystemB->operationB();
subsystemC->operationC();
}
};

int main() {
Facade* facade = new Facade();
facade->operation();

delete facade;
return 0;
}

总结:

在这个例子中,有三个子系统:SubsystemA、SubsystemB和SubsystemC,每个子系统都有一个操作方法,分别是operationA、operationB和operationC。

然后创建了一个Facade类,这个类持有所有子系统的实例,并提供一个统一的operation方法,这个方法内部调用了所有子系统的操作方法。

在main函数中,只需要创建Facade对象并调用其operation方法,就可以完成所有子系统的操作,而无需直接和子系统交互。这样就大大简化了客户端的使用,这就是外观模式的主要目的。

补充更新

外观模式:将一个具有统一特征流程性的东西封装成为一个外部接口,外部接口不需要了解内部实现,只需要调用接口,其余操作由接口函数内部完成。