外观模式(Facade Pattern)是一种结构型设计模式,它为复杂系统提供一个简化的接口,从而隐藏系统的复杂性,这个简化的接口就成为了更方便的访问点。外观模式定义了一个高层接口,使得客户端可以通过这个接口与系统交互,而不需要了解系统内部的具体实现。
关键角色
- 外观(Facade): 提供了一个简化接口,它是客户端与系统交互的入口点。外观将客户端的请求委派给系统中相应的子系统。
- 子系统(Subsystem): 实现了系统的具体功能,被外观所调用。子系统可以是一个或多个类的集合,负责处理外观传递过来的请求。
使用场景
外观模式其实就是一个中间人,隔绝了客户端和子系统。当子系统很复杂时,客户端不需要了解子系统,只需和外观交互
类图
![2024-01-24T10:43:20.png][1]
示例代码
```c++
include
// 子系统A class SubsystemA { public: void operationA() const { std::cout << "Subsystem A operation." << std::endl; } };
// 子系统B class SubsystemB { public: void operationB() const { std::cout << "Subsystem B operation." << std::endl; } };
// 子系统C class SubsystemC { public: void operationC() const { std::cout << "Subsystem C operation." << std::endl; } };
// 外观 class Facade { public: Facade() { // 在外观的构造函数中初始化子系统 subsystemA = new SubsystemA(); subsystemB = new SubsystemB(); subsystemC = new SubsystemC(); }
~Facade() {
// 在外观的析构函数中释放子系统
delete subsystemA;
delete subsystemB;
delete subsystemC;
}
// 提供一个简化的接口,将客户端的请求委派给子系统
void operation() const {
subsystemA->operationA();
subsystemB->operationB();
subsystemC->operationC();
}
private: SubsystemA subsystemA; SubsystemB subsystemB; SubsystemC* subsystemC; };
int main() { // 创建外观对象 Facade facade;
// 客户端通过外观对象访问子系统的功能
facade.operation();
return 0;
}
[1]: https://lcslearn.top/usr/uploads/2024/01/3206975220.png