外观模式

外观模式(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