外观模式:软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。
适用于:
客户端为了避免与复杂的子系统产生耦合而导致随着子系统的变化而变化。外观模式就是为了简化客户端与子系统之间的接口。
结构如下:
子系统:需要利用的各个功能模块
Facade:提供统一的简单接口,内部包含对子系统的包装整合
Client:调用Facade接口,避免与子系统直接交互
结构图:
小例子:计算机与人的故事
#include <iostream>
#include <memory>
using namespace std;
//外观模式:模拟人控制电脑
//电脑内部细节:CPU
class CPU {
public:
void freeze() { cout << "CPU is freezing" << endl; }
void execute() { cout << "CPU is executing instruction" << endl; }
};
//电脑内部细节:内存Memory
class Memory {
public:
void load() { cout << "Memory is loading" << endl; }
};
//电脑内部细节:硬盘
class HardDrive {
public:
void read() { cout << "HardDrive is reading" << endl; }
};
//外观类Facade: Computer
class Computer {
public:
Computer()
: cpu(new CPU()),
memory(new Memory()),
hardDrive(new HardDrive())
{ }
void startComputer()
{
cpu->freeze();
memory->load();
cpu->execute();
hardDrive->read();
}
private:
std::shared_ptr<CPU> cpu;
std::shared_ptr<Memory> memory;
std::shared_ptr<HardDrive> hardDrive;
};
int main()
{
Computer facade;
facade.startComputer();
return 0;
}
/*
CPU is freezing
Memory is loading
CPU is executing instruction
HardDrive is reading
*/