![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
Superbss
这个作者很懒,什么都没留下…
展开
-
C++ 工厂模式
简单工厂模式优点:1、工厂类中包含了必要的逻辑判断,可以根据用户的需求动态实例化相关的类。2、对客户端来说,去除了与具体产品的依赖。缺点:1、违背开放-封闭原则,添加新的产品时需要修改工厂类的内容。2、要求产品子类的类型差不多,使用的方法名都相同。如果类比较多,而所有的类又必须要添加一种方法,会非常麻烦。所以简单工厂模式一般应用于多种同类型类的情况,将这些类隐藏起来,再提供统一的接口,...原创 2019-06-25 19:34:34 · 406 阅读 · 0 评论 -
C++ 享元模式(Flyweight)
简介运用共享技术有效地支持大量细粒度对象的复用。优点由于不需要重新创建对象,减少了初始化对象的开销提高运行速度,而且新建对象也是需要占用内存的,从而也减小内存消耗。由于对对象复用,从而减小代码量和系统复杂度。使用场景当一个应用程序使用了大量的对象,对象的大多数状态都可变为外部状态,代码如下:#include <iostream>#include <string...原创 2019-07-11 20:01:20 · 175 阅读 · 0 评论 -
C++ 备忘录模式(Memento)
简介在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。数据库连接的事务管理就是备忘录模式。应用场景需要提供保存和恢复数据的相关状态场景。提供一个可回滚rollback操作。代码如下:#include <iostream>#include <string>#include <memo...原创 2019-07-18 19:13:21 · 195 阅读 · 0 评论 -
C++ 责任链模式(Chain of Resposibility)
简介责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。优点降低耦合度,将请求的发送者和接收者解耦。简化了对象,使得对象不需要知道链的结构。增加新的具体处理者...原创 2019-07-29 18:52:44 · 308 阅读 · 0 评论 -
C++ 状态模式(State)
直接举个例子,比如我们自己加的智能家居,只要联网就要自动连上服务器,中间就有以下几个状态,初始化、正在连接、连接成功、断开连接#include <iostream>#include <string>#include <memory>///////////////////////////////////////class iot;class sta...原创 2019-07-24 21:01:14 · 649 阅读 · 0 评论 -
C++ 中介者模式
简介用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。优点中介者模式简化了对象之间的交互,它用一对多交互代替了原来多对多交互,一对多关系更容易理解、维护和扩展,将原本难以理解的网状结构转换成相对简单的星型结构。更好地符合“开闭原则”。应用场景系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而...原创 2019-07-17 20:56:52 · 156 阅读 · 0 评论 -
C++ 命令模式(Command)
简介将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令模式通过这种封装的方式实现将客户端和接收端解耦。优点:实现客户端和接受者之间的解耦。可以动态的添加新的命令。只需要调用同一个方法(doCommand方法)便可以实现不同的功能。缺点:实现一个具体的命令系统,可能要创建很多的具体命令对象。应用场景命令模式一个常见的例子就是在应...原创 2019-07-31 19:23:11 · 310 阅读 · 0 评论 -
C++ 组合模式(Composite)
简介将对象组合成树形结构以表示‘部分-整体’的层次结构,所以有时候又叫做部分-整体模式。组合模式使得用户对单个对象和组合对象的使用具有一致性。,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。优点组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器。将...原创 2019-08-05 22:16:08 · 292 阅读 · 0 评论 -
C++ 代理模式(Proxy)
简介代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。可以详细控制访问某个类(对象)的方法,在调用这个方法前作的前置处理(统一的流程代码放到代理中处理)。调用这个方法后做后置处理。优点:通过一个代理对象完成一系列的处理,在将来的程序改动中,就会允许动态更改、添加、删除和重新定位对象,这使开发人员的发布变得透明,符合开闭原则。...原创 2019-07-15 20:40:26 · 1549 阅读 · 0 评论 -
C++ 策略模式
简介定义了算法家族,分别封装起来,让他们之间可以相互替换,让算法的变化,不会影响到使用算法的客户。优点多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。策略模式提供了对开闭原则的完美支持,...原创 2019-07-06 15:19:03 · 149 阅读 · 0 评论 -
C++ 观察者模式
什么是观察者模式观察者模式:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。观察者模式是一种对象行为型模式。观察者模式的优点:观察者模式满足“开-闭原则”。高内聚、低偶合。观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察...原创 2019-06-26 20:05:18 · 299 阅读 · 0 评论 -
C++ 桥接模式(Bridge)
简介桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化。作用解决在有多种可能会变化的情况下,用继承会造成类越来越复杂问题,扩展起来不灵活。应用场景设计中有超过一维的变化我们就可以用桥模式。如果只有一维在变化,那么我们用继承就可以圆满的解决问题。代码如下:#include <iostream>#include <string>#i...原创 2019-07-02 20:28:42 · 380 阅读 · 0 评论 -
C++ 装饰模式(Decorator)
简介装饰模式:动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。优点不仅可以扩展原有功能,防止类的爆炸式增长缺点这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。应用场景1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。2、需要动态地给一个对象增加功能,这些功能也...原创 2019-07-08 19:59:24 · 216 阅读 · 0 评论 -
C++ 单例模式
单例模式:保证只能产生一个实例初步了解单例c++简单单例源码:#include <iostream>class singleton{private: //构造 singleton(void) { std::cout << "create singleton ." << std::endl; } static sing...原创 2019-06-24 20:26:57 · 184 阅读 · 0 评论 -
C++ 建造者模式(builder)
简介Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开 来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。作用建造者模式是将一个复杂对象和他的构造和组装过程分离,这样再重复创建不同对象时使用相同的...原创 2019-06-27 19:59:35 · 329 阅读 · 0 评论 -
C++ 外观模式(Facade)
简介外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。应用场景借鉴:https://www.jianshu.com/p/f5c69d8544a11、在设计初期阶段,应该要有意识的将不同的两个层分离,在层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。2、在开发阶段,子系统往往因为不断的...原创 2019-07-13 16:19:04 · 173 阅读 · 0 评论 -
C++ 适配器模式
简介适配器模式:转接头1、将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2、保留现有类所提供的服务,向客户提供接口,以满足客户的期望。适配器的优点:1、将目标类和适配者类解耦2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性3、灵活性和扩展性都非常好,符合开闭原则三种...原创 2019-06-29 15:54:43 · 182 阅读 · 0 评论 -
C++ 原型模式
简介用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式和拷贝构造的区别原型模式类是未知的,拷贝构造类是已知的:意思是原型函数可以使用多态,所以类是未知的,也可能创建的是子类的对象;而拷贝构造就是他自己了。所以拷贝构造就是原型模式的一个子集而且还有个要注意的是,完全拷贝一个对象,肯定要用深拷贝使用场景基本就是你需要从A的实例得到一份与A内容相同,但是又互不干扰的实...原创 2019-07-04 21:41:14 · 134 阅读 · 0 评论 -
C++ 访问器模式(Visitor)
简介Visitor 模式:将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接优点简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。缺点破坏了封装性使用场景在开发和设计过程中经常会遇到一种情况就是需求变更,经常我们做好了一个系统原型,客户又有了新的需求。我们又因此不得不去修改已有的设计,其带来的后果就是设计根本就不可能封闭、编译永远都是整个系统代码...原创 2019-08-06 19:21:48 · 671 阅读 · 0 评论