设计模式
设计模式
欲盖弥彰1314
如有一味绝境,非历十方生死。
展开
-
设计模式 —— 观察者模式
以前看C语言的观察者模式看得一头雾水,如今学习这C++来写这观察者模式如顿悟,原来是这么回事,用C语言写的话自然也是可以了。接下来做一个有GUI的项目,观察者模式可以派上用场!!! what 观察者是用于模式建立一种对象与对象之间依赖关系,一个对象发生改变时自动通知其他对象,其他对象做出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察者目标可以对应多个观察者 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源原创 2020-09-22 00:07:49 · 139 阅读 · 0 评论 -
关于设计模式的学习
https://github.com/liu-jianhao/Cpp-Design-Patterns原创 2020-09-05 17:49:39 · 136 阅读 · 0 评论 -
设计模式学学习 — 策略模式
策略模式定义 定义一系列算法,将每个算法封装起来,而且使它们可以互相替换。策略模式让算法独立于使用它的客户而独立变化 详细理论参考: https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html 简单案例实现 假如现在你要去北京,有多种交通方式可以选择,汽车、飞机、高铁,当然牛逼的话也可以选择自行车或走路。这里不同的交通方式就是不同的策略 //抽象的交通策略 class AbstractTraf原创 2020-09-05 17:49:23 · 146 阅读 · 0 评论 -
设计模式学习 — 模板方法模式
模板方法模式定义 定义一个操作中算法的框架,将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 从封装变化的角度去看,模板方法模式用于组件协作方面。 简单案例 在日常生活中,冲咖啡和冲茶叶的基本步骤是比较类似。 冲咖啡大致步骤: 1、煮水 2、冲泡咖啡 3、倒入杯中 4、加糖和牛奶 冲茶大致步骤: 1、煮水 2、冲泡茶叶 3、倒入杯中 4、加柠檬 class DrinkMaker { protected: virtual void Boil原创 2020-09-05 16:07:25 · 119 阅读 · 0 评论 -
设计模式学习 — 适配器模式
适配器模式作用定义 将一个类的接口转换成客户希望的另一种接口,使得原本由于接口不兼容不能一起工作的类一起工作 适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。 从封装变化角度对模式分类,适配器模式实现的是接口隔离 适配器模式的优缺点 适配器案例 给手机充电要用配的电源适配器,对于220V直接给手机充电,那就要上天了,这里的给手机充电的电源适配就很类似适配器模式中的适配器; 还有,比如在嵌入式开发中,一个单片机系统需要3.3v供电,现在只有5V的供电头,这时候就需要一个稳压电路/稳压模块来原创 2020-09-05 03:05:28 · 133 阅读 · 0 评论 -
设计模式学习 — 外观模式
外观模式定义 Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。 Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 属于结构型设计模式 菜鸟教程的介绍 简单的案例一 在一个系统中,往往完成一个功能需要多个子系统一同执行才能完成,比如录制视频原创 2020-09-03 14:49:57 · 164 阅读 · 0 评论 -
设计模式学习 — 代理模式
代理模式定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端对象之间起到中介的作用。 代理类和被代理的类具有共同接口。 代理模式的应用场景 1、在不同机器上服务器上的应用 A机器服务要和B服务器的通信,A服务器请求B服务器执行doXXX()方法,两个服务器都要进行开发,然而B服务器还没开发好,A机器服务已经做好,则A机器服务无法测试,此时A机器服务测试可以通过代理模式用代理类模拟一个真正B机器上的服务模块。原创 2020-09-03 11:29:20 · 189 阅读 · 0 评论 -
设计模式学习 — 单例模式
单例模式 对于一个东西在整个系统,全局上只有一个,比如电脑的任务管理器,无论你按多少次Ctrl + Alt + Del都会只打开同一个窗口。 将任务管理抽象为一个类的话,单例模式也就是一个类全局只有一个实例,这个类要提供一个全局的访问点。 单例模式可以控制类实例的数目,节省系统资源。能避免一个全局使用的类频繁被创建和销毁带来的开销。 单例模式实现步骤 1、构造私有化,使类不能实例化 2、增加静态私有的当前类的指针 3、提供静态的对外接口,可以让用户得到单例对象 两种不同实现方式的单例模式 1、懒汉式 需要原创 2020-08-30 16:10:17 · 170 阅读 · 0 评论 -
设计模式学习 — 抽象工厂模式
创建型设计模式 围绕一个超级工厂创建其他工厂 介绍 —— 截图来自菜鸟教程 案例实现 日常吃的东西都统称为食物,食物中又分成很多类,如蔬菜、水果等,蔬菜中又有胡萝卜、土豆、西红柿等等,水果则有苹果、香蕉、芒果等等。 1、蔬菜和水果抽象基类 class Vegetable { publi原创 2020-08-30 14:55:07 · 762 阅读 · 0 评论 -
设计模式学习——工厂方法模式
之前学过了简单工厂模式,简化了对象的创建,但是为啥又有工厂方法模式? 在简单工厂模式中每增加一种产品就要修改工厂类,简单工厂模式不符合开闭原则——对扩展开放,对修改关闭。 对于之前的 简单工厂模式 :https://blog.csdn.net/qq_36413982/article/details/107531944 , 加入要增加一个取模运算就要修改工厂类。 所以又引入了工厂方法模式。 缺点 1、类的个数成倍增加,导致类越来越多,增加维护成本。 2、增减系统的抽象性和理解难度。** 优点 1、不需要记原创 2020-08-29 20:39:39 · 148 阅读 · 0 评论 -
设计模式学习——简单工厂模式
工厂模式属于创建型的设计模式,创建型的设计模式隐藏了实例化对象的的创建逻辑, 不是直接使用new来实例化对象,更加灵活在程序中针对某个给定实例需要创建哪些对象更加灵活 介绍 这部分内容摘录删减自菜鸟教程 Why: 主要是解决接口选择问题 When: 计划在不同条件下实例化不同的对象 How: 实现一个工厂类,通过工厂类返回不同的子类(产品类) Where: 一些使用场景 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器 2、数据库访问,最终还没决定使用何种数据库,这是可以变化的 3原创 2020-07-23 11:08:24 · 114 阅读 · 0 评论