
设计模式
文章平均质量分 57
《设计模式》课程学习的总结
赛马丸子
这个作者很懒,什么都没留下…
展开
-
《设计模式》19备忘录模式
19.备忘录模式意在解决的问题:在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序可回溯到对象之前处于某点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存和回复?但同时又不会因此破坏对象本身的封装性。模式原理class Memo{ //该部分是简化的需要存储的状态 string state;public: Memo(const string &s):state(s){}原创 2021-10-20 11:22:26 · 184 阅读 · 0 评论 -
《设计模式》18 状态模式
状态变化模式在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了解决方案。典型模式State 状态变化模式Memento 备忘录诸如对于不同状态对应的函数执行内容不一致的情况,如文件在关闭,打开,等待等等三个状态都可以执行Operation1(). Operation2(), Operation3()等三个函数,但执行内容不一样,且后续对于其他待开发的状态,又需要写对应的不同的执行函数,如下是改造前常用的方法原创 2021-10-18 22:50:54 · 146 阅读 · 0 评论 -
《设计模式》17 中介者(Mediator)模式
在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂引用关系,如果一些需求的更改,这种直接的引用关系将面临不断的变化。因此,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。举例如下,对于图中左侧这样存在复杂相互依赖的情况,我们可以转为右图,设计一个中介者,作为所有互相关联类之间的接口。总结:将多个对象间复杂的关联关系解耦,该模式将 多个对象间的控制逻辑进行集中管理变 “多个对象互相关联” 为" 多个对原创 2021-10-10 21:12:06 · 133 阅读 · 0 评论 -
《设计模式》16 适配器
主要是为了解决新接口和老接口之间的转换的问题;为了让老接口以及继承老接口的所有子类在不修改的情况下也能继续用。GOF 定义的两种适配器模式(Adapter),包括类适配器和对象适配器,但是类适配器缺点多,不推荐。因此采用对象适配器就可以,其采用"对象组合方式",更符合松耦合精神。...原创 2021-10-03 23:06:15 · 127 阅读 · 0 评论 -
《设计模式》12 单例模式
1. 动机:只能有一个,或者多余1个时,性能降低;如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这是类设计者的责任,而不是使用者的责任。2. 单线程class Singleton{private:Singleton();Singleton(const Singleton& other);public: static Singleton* getInstance(); static Singleton* m_instancer;};Singl原创 2021-10-01 21:04:10 · 160 阅读 · 0 评论 -
《设计模式》10 原型模式,11构建器
1. 还是画结构图比较清晰易懂,可以看出,原型模式相较于工厂模式,少了Factory类,而是将新实例化的定义,以clone的函数来代替,同时实现函数中,注意return语句中,通过构造函数的拷贝构造,来实现实例化一个新类。2. 原型模式和构建器在设计模式中用到的场景很少,大部分通过工厂模式和抽象模式就可以解决。若日后看到了懂其原理即可。3. 注意clone函数内的实例化是深拷贝构造函数,即内部指针内容也需要拷贝。该设计模式的优点就是复制的类不是一个新类,而是一个已经有状态有内容的类,即原类的当前状态被克原创 2021-09-30 16:06:56 · 139 阅读 · 0 评论 -
CPP 23个设计模式 听课笔记 (一)
教学视频链接:https://www.bilibili.com/video/BV1kW411P7KS?p=2P01- 设计模式简介(21/6/22)理解松耦合设计思想掌握面向对象设计原则掌握重构技法改善设计掌握GOF核心设计模式一、 推荐教材《设计模式:可复用面向对象软件的基础》注意:设计模式的关键是可复用CPP中大对数继承是public继承如果是利用父类进行多态,那么vecotr内部要传入指针,不能是对象。如果vector等内部是指针,那么传入内容时必须是栈对象原创 2021-06-22 21:02:10 · 326 阅读 · 0 评论 -
CPP 23个设计模式 听课笔记 (二) 模板方法&策略模式
模板方法(21.6.23)1. 重构关键技法静态-》动态早绑定-》晚绑定继承-》组合编译时依赖-》运行时依赖紧耦合-》松耦合2. 知识点回顾* 父类的析构函数需要写成 virtual 虚函数* 虚函数与纯虚函数区别?区别虚函数在子类覆盖时,注意,不是重载,不会覆盖基类的实现。根据动态绑定的类型,选择要实现的是基类还是子类的函数带有纯虚函数的类都是抽象类,不可直接实例化。区分重载(overload),覆盖(Override)和隐藏(hide) 收藏重载overloa原创 2021-06-24 20:13:37 · 349 阅读 · 1 评论 -
《CPP设计模式》05观察者模式
接口在c++中就是指:一个抽象基类观察者模式的相关使用条件:来源意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。实际使用案例:汇率变化->观察者1: 进口公司;->观察者2:出口公司;->观察者3:…铃响:观察者.原创 2021-08-04 17:04:46 · 224 阅读 · 0 评论 -
《CPP设计模式》06 装饰模式
装饰模式利用C++ RTTI(运行时识别)的特性,重构代码,发现统一性,减少代码冗余。案例如下:对于各类文件,如file, network, memory等均包括读,写,和查找等三个操作; 对于该类文件,处理时主要有以下m种操作,如:加密,缓存,以及加密及缓存等。原始思路一:定义基类Stream,衍生三个子类FileStream, MemoryStream, NetworkStream.定义m种操作,如加密EntropyProcess, 缓存BufferProcess,加密及缓存Ent原创 2021-08-27 22:57:42 · 200 阅读 · 0 评论 -
C++设计模式 07 桥模式
桥模式和之前的装饰模式类似,都是采用 运行时识别的技巧,对代码进行重构和精简。本次案例的上课视频来自极客班,需要辅助视频看本文才可以。本次待解决的问题如下:如果我们想做一个可以发送信息的软件,但是该软件会在不同的平台发布,如window电脑端,mac电脑端,以及Mobile手机端等等,针对不同平台,同样的操作需要不同的代码,如同样是发送信息,但是不同的平台的实现肯定是不一样的。假设我们有n个平台,且每个平台上我们要实现软件的不同版本,如精简版和全能版两种,以m为代替,这样我们解决该问题的传统方法..原创 2021-09-01 22:49:45 · 222 阅读 · 0 评论 -
《CPP设计模式》08 工厂模式
“对象创建”模式通过对象创建模式,绕开new, 来避免对象创建过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作该模式框架下的四个典型模式,包括本模式,有:Factory Method,Abstract Method, Prototype Method, Builder(构建器)以上四个模式解决的是同一个问题,只是细节上有些微不同一、工厂模式(Factory)面向接口编程:最直观的表现:变量要生成抽象基类;C++本身没有给我们提供一个多态new,我原创 2021-09-07 20:47:34 · 407 阅读 · 0 评论 -
《CPP设计模式》09 抽象模式
1. 抽象模式是工厂模式的升级,可以说工厂模式是抽象模式的特例,但是工厂模式和抽象模式仍然是各自有各自的适应范围,不代表工厂模式可以适用的,抽象模式就更好。2. 这里我们构建一个案例,未知品牌的数据库的操作,如可能是对MySQL, Oracle,等几种不同品牌的数据库的操作。这里由于变化的是品牌,不变的是所需操作,如包括:Connection、Command,以及DataReader等。首先利用工厂模式,具体需要实现的类和函数大致如下:2.1 这里可以看到只要外界传入指定品牌的相应的工厂类即可,如MSQ原创 2021-09-30 10:40:30 · 193 阅读 · 0 评论