外观模式(Facade Pattern)是一种结构型设计模式,它为复杂系统提供一个简化的接口,从而隐藏系统的复杂性,这个简化的接口就成为了更方便的访问点。外观模式定义了一个高层接口,使得客户端可以通过这个接口与系统交互,而不需要了解系统内部的具体实现。
关键角色
- 外观(Facade): 提供了一个简化接口,它是客户端与系统交互的入口点。外观将客户端的请求委派给系统中相应的子系统。
- 子系统(Subsystem): 实现了系统的具体功能,被外观所调用。子系统可以是一个或多个类的集合,负责处理外观传递过来的请求。
使用场景
外观模式其实就是一个中间人,隔绝了客户端和子系统。当子系统很复杂时,客户端不需要了解子系统,只需和外观交互
类图
示例代码
#include <iostream>
// 子系统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;
}