当前位置: 首页 > news >正文

【设计模式之外观模式 -- C++】

外观模式 – 统一接口,简化调用

外观模式(Facade Pattern)是一种常用的软件设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更易于使用。外观模式定义了一个高层接口,这个接口使得这一子系统更易于使用。百度百科

1) 组成

1.一个基类;
2.n个相同接口的子系统类;
3.一个外观类;

大白话就是:有一个外观类,起到整体的调度;n个子系统的方法名相同,功能类型,可以统一调度

2)好处
  1. 简化接口:外观模式提供了一个统一的接口,隐藏了子系统的复杂性,使得子系统更易于使用。
  2. 提高了客户端使用的便利性:客户端不需要了解系统内部的复杂联系,只需要通过外观类来调用需要的功能。
  3. 提高了系统的灵活性和安全性:实现系统与客户端的解耦,使得系统的内部变化不会影响到客户端。
  4. 降低了代码耦合度:将客户端与复杂的子系统解耦,使得子系统的变化不会影响到客户端。
  5. 提供了一个访问子系统的统一入口:集中管理和降低对象之间的依赖关系。
3)使用场景
  1. 当你想为一个复杂的子系统提供一个简单的接口时。外观模式可以提供一个简单的默认视图,这个视图对于大多数客户来说足够,而只有需要更多的可定制性的客户才需要超越这个外观接口。
  2. 当客户和抽象类的实现部分之间存在很大的依赖性时。引入外观可以将子系统与客户以及其他子系统解耦,提高子系统的独立性和可移植性。
  3. 当你需要构建一个层次结构的子系统时,使用外观模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,那么你可以让它们仅通过外观接口进行通信,从而简化了它们之间的依赖关系。
4)实现
  1. 定义一个基类:有start和stop方法
class System {
public:virtual void Start() = 0;virtual void Stop() = 0;
};
  1. 定义两个个子类
// 定义一个子类:程序1
class Program1 : public System {
public:void Start() override {cout << "Program1: Start.\n";}void Stop() override {cout << "Program1: Stop.\n";}
};// 定义一个子类:程序2
class Program2 : public System {
public:void Start() override {cout << "Program2: Start.\n";}void Stop() override {cout << "Program2: Stop.\n";}
};
  1. 定义外观类
class Facade {
private:System *program1_;System *program2_;public:Facade() {program1_ = new Program1;program2_ = new Program2;}~Facade() {delete program1_;delete program2_;}void Start() {program1_->Start();program2_->Start();}void Stop() {program1_->Stop();program2_->Stop();}
};
  1. 测试
int main() {Facade *facade = new Facade;facade->Start();facade->Stop();delete facade;return 0;
}
  1. 结果
Program1: Start.
Program2: Start.
Program1: Stop.
Program2: Stop.
http://www.lryc.cn/news/372360.html

相关文章:

  • 【课程总结】Day8(上):深度学习基本流程
  • 论文发表知网//新课程//简介//投稿指南
  • 全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现
  • UE5实战篇二(对话系统1):导语
  • 无人机的发展
  • MySQL和MariaDB的对比和选型
  • Android11 后台启动Activity
  • 这4款国产软件,因为太良心好用,甚至被误认为是外国人开发的
  • 【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣
  • OpenCV单词轮廓检测
  • 主流后端开发语言对比
  • Linux排查问题常用命令
  • 【Python/Pytorch - 网络模型】-- 手把手搭建E3D LSTM网络
  • C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别
  • 50.Python-web框架-Django中引入静态的bootstrap样式
  • 机器学习实验----支持向量机(SVM)实现二分类
  • STM32自己从零开始实操05:接口电路原理图
  • git子模块
  • stm32编写Modbus步骤
  • 基于 Transformer 的大语言模型
  • 证照之星是一款很受欢迎的证件照制作软件
  • 不定时更新 解决无法访问GitHub github.com 打不开 dns访问加速
  • 单向环形链表的创建与判断链表是否有环
  • JVM堆栈的区别、分配内存与并发安全问题、对象定位
  • Python教程:机器学习 - 百分位数(4)
  • 数据结构习题(快期末了)
  • Http协议:Http缓存
  • idea插件开发之hello idea plugin
  • Sm4【国密4加密解密】
  • git如果将多次提交压缩成一次