外观模式(Facade Pattern)是一种结构型设计模式。它提供了一个简化接口,使得客户端能够更方便地访问子系统中的一组接口。外观模式定义了一个高层接口,这个接口可以包含子系统中多个接口的功能,从而简化了客户端的使用。
外观模式包含以下角色:
外观模式的原理是对子系统进行封装,隐藏子系统的复杂性,提供一个简洁的接口供客户端使用。外观类通过调用子系统类来实现客户端的请求,从而简化了客户端的代码。
假设要实现一个计算器程序,它可以进行加、减、乘、除四则运算。我们可以将加减乘除的操作封装在子系统类中,然后用一个外观类来对外提供接口。
以下是一个简单的外观模式示例:
#include
using namespace std;
class SubsystemA {
public:
void operationA() {
cout << "Subsystem A operation" << endl;
}
};
class SubsystemB {
public:
void operationB() {
cout << "Subsystem B operation" << endl;
}
};
class SubsystemC {
public:
void operationC() {
cout << "Subsystem C operation" << endl;
}
};
class Facade {
public:
Facade() {
one = new SubsystemA();
two = new SubsystemB();
three = new SubsystemC();
}
void operation() {
one->operationA();
two->operationB();
three->operationC();
}
private:
SubsystemA *one;
SubsystemB *two;
SubsystemC *three;
};
int main() {
Facade facade;
facade.operation();
return 0;
}
Subsystem A operation
Subsystem B operation
Subsystem C operation
这个示例中,有三个子系统类:SubsystemA、SubsystemB和SubsystemC,它们都有一个自己的操作。然后在一个外观类Facade中将它们封装起来,在客户端只需要调用一次Facade类的操作即可。
外观模式可以简化客户端代码,提高系统的可维护性和扩展性。它适用于以下情况: