概述: |
外观模式是结构型模式,它将复杂的子类系统抽象到同一个接口进行管理,外界只需要通过该接口与子类系统进行交互,而不必直接与复杂的子类系统进行交互
外观模式降低访问复杂系统的内部子系统的复杂度,简化客户端与之的接口
优点: |
-
减少客户端与系统之间的耦合度
-
简化客户端代码
缺点: |
- 不符合开闭原则,扩张功能需要修改客户端和统一接口的代码
使用场景: |
-
客户端与系统存在最大的依赖性
-
为复杂系统提供一个统一的接口
UML类图: |
客户在外卖平台上下订单,其中Order就是暴露给用户的外观,然后饭店和快递员是子系统
实例: |
#include <iostream>
// 饭店
class Restaurant{
public:
void cook(){
std::cout << "做饭" << std::endl;
}
};
// 外卖小哥
class DeliveryMan{
public:
void delivery(){
std::cout << "送外卖" << std::endl;
}
};
// 下订单
class Order{
public:
void order(){
cooker.cook();
deliver.delivery();
}
private:
Restaurant cooker;
DeliveryMan deliver;
};
// 用户
class Client{
public:
void eat(){
order.order();
std::cout << "吃饭" << std::endl;
}
private:
Order order;
};
int main(){
Client client;
client.eat();
return 0;
}