外观模式(C++)
介绍
外观模式: 隐藏系统的细节,只向客户端提供一个可访问系统的接口. 属于结构型模式,通过向现有系统添加一个接口,来隐藏系统的复杂性.
目的: 定义一个高层接口,为子系统中的一组接口提供一个一致的界面,使得子系统更易被使用.
关键代码: 在客户端个复杂系统之间再加一层,这一层将调用顺序\依赖关系处理好.
优点:
- 减少系统的相互依赖;
- 提高灵活性;
- 提高安全性.
缺点:
- 不符合开闭原则,如果要修改很麻烦,继承重写都不适合.
使用场景:
- 为复杂的模块或子系统提外界访问的接口;
- 子模块相对独立;
- 预防低水平人员带来的风险.
UML
示例
#include <iostream>
//抽象控件类
class Component {
public:
virtual void Start() = 0;
virtual void Stop() = 0;
};
//子控件
class ComponentA : public Component {
public:
void Start() override {
std::cout << "-----ComponentA Start()-----" << std::endl;
}
void Stop() override {
std::cout << "-----ComponentA Stop()------" << std::endl;
}
};
//子控件
class ComponentB : public Component {
public:
void Start() override {
std::cout << "-----ComponentB Start()-----" << std::endl;
}
void Stop() override {
std::cout << "-----ComponentB Stop()------" << std::endl;
}
};
class Machine {
public:
void Start() {
component_a_.Start();
component_b_.Start();
std::cout << "------Machine Start()------" << std::endl;
}
void Stop() {
component_a_.Stop();
component_b_.Stop();
std::cout << "------Machine Stop()------" << std::endl;
}
private:
ComponentA component_a_;
ComponentB component_b_;
};
int main() {
Machine machine;
machine.Start();
machine.Stop();
return 0;
}
其实很简单...我们写的函数都算是组装了,从广义看也算外观设计模式了...
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步