C++设计模式之外观模式
- 简介
- 描述
- 原理
- 示例
- 输出结果
- 示例解释
- 结论及应用场景:
简介
外观模式(Facade Pattern)是一种结构型设计模式。它提供了一个简化接口,使得客户端能够更方便地访问子系统中的一组接口。外观模式定义了一个高层接口,这个接口可以包含子系统中多个接口的功能,从而简化了客户端的使用。
描述
外观模式包含以下角色:
- 外观类(Facade):提供了一个简化接口,隐藏了系统的复杂性。客户端只需要调用外观类中的方法即可。
- 子系统类(Subsystem):实现了系统的功能,可以由客户端直接访问。
原理
外观模式的原理是对子系统进行封装,隐藏子系统的复杂性,提供一个简洁的接口供客户端使用。外观类通过调用子系统类来实现客户端的请求,从而简化了客户端的代码。
示例
假设要实现一个计算器程序,它可以进行加、减、乘、除四则运算。我们可以将加减乘除的操作封装在子系统类中,然后用一个外观类来对外提供接口。
以下是一个简单的外观模式示例:
#include <iostream>
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类的操作即可。
结论及应用场景:
外观模式可以简化客户端代码,提高系统的可维护性和扩展性。它适用于以下情况:
- 当一个复杂系统的子系统很多,且它们之间相互依赖,或者耦合度很高时,可以考虑采用外观模式。
- 当客户端需要访问子系统的多个功能时,通过外观模式统一对外提供接口,可以简化客户端的使用。