外观模式(Facade Pattern)
# 外观模式(Facade Pattern)
# 概念
外观模式是一种结构设计模式,它提供了一个简单的接口,用于隐藏复杂的子系统,以便客户端可以通过外观对象与子系统进行交互。外观模式通过提供一个高层次的接口,简化了客户端与子系统之间的通信,使得客户端更容易使用子系统。
# 思想
外观模式的思想是将复杂的子系统封装在一个外观类中,客户端只需要与外观类进行交互,而不需要直接与子系统中的各个类进行交互。外观类充当了客户端与子系统之间的中介,提供了一个简化的接口,隐藏了底层的复杂性。
# 角色
- 客户端(Client):与外观对象进行交互,通过外观对象简化与子系统的通信。
- 外观类(Facade):封装了子系统的复杂逻辑,提供了一个简化的接口供客户端使用。
- 子系统类(SubSystem):实现了子系统的具体功能,由外观类进行调用。
# 优点
- 简化接口:外观模式提供了一个简化的接口,隐藏了子系统的复杂性,使得客户端更容易使用子系统。
- 解耦合:外观模式将客户端与子系统之间的耦合度降低,客户端不需要知道子系统的具体实现细节。
- 提高灵活性:外观模式可以隔离客户端和子系统之间的变化,当子系统发生变化时,只需要修改外观类而不影响到客户端。
# 缺点
- 违背开闭原则:如果需要修改子系统的行为,可能需要修改外观类的代码。
- 不符合单一职责原则:外观类通常涉及多个子系统的逻辑,可能导致外观类变得庞大而复杂。
# 类图
@startuml
class Client {
+execute(): void
}
class SubSystemA {
+operationA(): void
}
class SubSystemB {
+operationB(): void
}
class SubSystemC {
+operationC(): void
}
class Facade {
-subSystemA: SubSystemA
-subSystemB: SubSystemB
-subSystemC: SubSystemC
+Facade()
+executeOperation(): void
}
note right of Client::execute
Facade facade = new Facade();
facade.executeOperation();
end note
Client --> Facade
Facade *-- SubSystemA
Facade *-- SubSystemB
Facade *-- SubSystemC
@enduml
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
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
# 示例代码
#include <iostream>
// 子系统类A
class SubSystemA {
public:
void operationA() {
std::cout << "SubSystemA operationA" << std::endl;
}
};
// 子系统类B
class SubSystemB {
public:
void operationB() {
std::cout << "SubSystemB operationB" << std::endl;
}
};
// 子系统类C
class SubSystemC {
public:
void operationC() {
std::cout << "SubSystemC operationC" << std::endl;
}
};
// 外观类
class Facade {
private:
SubSystemA subSystemA;
SubSystemB subSystemB;
SubSystemC subSystemC;
public:
Facade() {}
void executeOperation() {
subSystemA.operationA();
subSystemB.operationB();
subSystemC.operationC();
}
};
int main() {
Facade facade;
facade.executeOperation();
return 0;
}
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
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
代码运行结果:
SubSystemA operationA
SubSystemB operationB
SubSystemC operationC
1
2
3
2
3
简单描述示例代码: 上述示例代码展示了外观模式的实现。其中,子系统包括SubSystemA、SubSystemB和SubSystemC,分别实现了具体的操作。Facade类作为外观类封装了这些子系统,提供了一个简化的接口executeOperation()供客户端调用。在客户端代码中,创建了一个Facade对象,并通过调用executeOperation()方法,实现了对子系统操作的统一调用。运行示例代码,可以看到输出了SubSystemA operationA、SubSystemB operationB和SubSystemC operationC,表示成功执行了子系统的操作。
编辑 (opens new window)
上次更新: 2023/06/09, 13:17:31
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05