外观模式的核心目标是为复杂子系统提供统一简洁接口以降低耦合度,它不封装功能而整合调用流程,外观类仅协调已有子系统对象的调用顺序与参数传递。

外观模式(Facade)在 C++ 中的核心目标是为一组复杂的子系统提供一个统一、简洁的接口,从而降低客户端与子系统之间的耦合度。它不封装功能,而是“整合调用流程”,让使用者只需面对一个类(Facade 类),而不用了解背后多个类如何协作。
外观类怎么设计?
外观类本身不实现具体业务逻辑,只负责协调已有子系统对象的调用顺序和参数传递:
- 在外观类内部持有各子系统类的实例(或指针/引用),通常在构造函数中初始化
- 对外只暴露少量高层方法(如
startSystem()、shutdown()),每个方法内部按需调用多个子系统接口 - 避免把子系统细节(如异常类型、返回值结构)直接暴露给客户端,可做适配或统一错误处理
一个典型例子:电脑启动过程
假设电脑启动涉及 CPU、内存、硬盘三个子系统,各自有独立的初始化逻辑:
class CPU { public: void freeze() { cout << "CPU frozen\n"; } void jump(long addr) { cout << "Jump to " << addr << "\n"; } };
class Memory { public: void load(long pos, const string& data) { cout << "Load '" << data << "' to " << pos << "\n"; } };
class HardDrive { public: string read(long sector) { return "OS data from sector " + to_string(sector); } };
class ComputerFacade {
CPU cpu;
Memory mem;
HardDrive hd;
public:
ComputerFacade() = default;
void start() {
cpu.freeze();
mem.load(0x1234, hd.read(0x456));
cpu.jump(0x1234);
}
};登录后复制
客户端只需:ComputerFacade pc; pc.start(); —— 完全不用知道底层三步怎么配合。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~