外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它为复杂系统提供一个简化的接口,从而隐藏系统的复杂性,这个简化的接口就成为了更方便的访问点。外观模式定义了一个高层接口,使得客户端可以通过这个接口与系统交互,而不需要了解系统内部的具体实现。

关键角色

  • 外观(Facade): 提供了一个简化接口,它是客户端与系统交互的入口点。外观将客户端的请求委派给系统中相应的子系统。
  • 子系统(Subsystem): 实现了系统的具体功能,被外观所调用。子系统可以是一个或多个类的集合,负责处理外观传递过来的请求。

使用场景

外观模式其实就是一个中间人,隔绝了客户端和子系统。当子系统很复杂时,客户端不需要了解子系统,只需和外观交互

类图

2024-01-24T10:43:20.png

示例代码

#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;
}