
设计模式
三公子Tjq
三少爷的剑:剑气纵横三万里,一剑光寒十九洲!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++设计模式目录和总结
从封装变化角度对模式分类,如下:1.组件协作:(解决协作问题;)模板方法(template method) 策略模式(strategy) 观察者(observer/event)2.单一职责:(解决类与类责任划分问题)装饰器(decorator) 桥模式(bridge)3.“对象”创建型模式:(对象对象过程中依赖的问题)工厂方法(factory method) 抽象工厂(abstract factory) 原型模式(prototype) 构建器(builder)4.对象性能:原创 2020-06-27 12:34:40 · 792 阅读 · 0 评论 -
C++设计模式——解释器模式(interpreter pattern)
一、原理讲解1.1意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。1.2应用场景文法简单。对于复杂的文法,文法的类层次变得庞大而无法管理;此时语法分析程序生成器这样的工具是更好的选择。它们无法构件抽象语法树即可解释表达式,这样可以节省空间而且还可能节省时间。效率不是关键问题。最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下,转换器也可用解释器模式实现,该模原创 2020-11-29 00:31:02 · 1592 阅读 · 3 评论 -
C++设计模式——访问者模式(visitor pattern)
一、原理讲解1.1意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。1.2应用场景一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作;需要对一个对象结构中的对象进行很多不同并且不相关的操作,而你想避免这些操作“污染”这些对象的类;定义对象结构的类很少改变,但经常需要在此结构定义新的操作;1.3结构图(UML图)1.4代码实现步骤a1 定义接口命令类Command,定义一个执行接口函数e原创 2020-11-13 21:38:30 · 1642 阅读 · 0 评论 -
C++设计模式——命令模式(command pattern)
一、原理讲解别名动作(action),事务(transaction)。1.1意图将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。1.2应用场景抽象出待执行的动作以参数化某对象;在不同的时刻指定、排列和执行请求;(比如跨进程传递命令对象)支持取消操作;支持修改日志,当系统奔溃时这些修改可被重做一次;用构建在原语操作上的高层操作构造一个系统;1.3结构图(UML图)1.4代码实现步骤a1 定义接口命令类Comman原创 2020-10-28 20:19:01 · 848 阅读 · 2 评论 -
C++设计模式——职责链模式(responsibility chain pattern)
一、原理讲解1.1意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。1.2应用场景有多个对象可以处理一个请求,哪个对象处理该请求运行时自动确定;你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;可处理一个请求的对象集合应被动态指定;1.3结构图(UML图)1.4代码实现步骤a1 定义接口迭代器类IHandler,定义一个接口函数request();a2 定义一个具体处理类Ha原创 2020-10-24 22:44:29 · 752 阅读 · 0 评论 -
C++设计模式——迭代器模式(iterator pattern)
一、原理讲解1.1意图提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。1.2应用场景访问一个聚合对象的内容而无需暴露它的内部表示;支持对聚合对象的多种遍历;为遍历多种不同的聚合结构提供一个统一的接口(支持多态迭代);1.3结构图(UML图)1.4代码实现步骤a1 定义接口迭代器类Iterator,定义四个接口函数first(),next(),current(),isEnd();a2 定义一个抽象聚合类Aggregate(),定义四个接口函数push()原创 2020-10-23 22:41:33 · 1250 阅读 · 2 评论 -
C++设计模式——组合模式(composite pattern)
# 一、原理讲解## 1.1意图将对象组合成树形结构以表示“部分 — 整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 ## 1.2应用场景 - 你想表示对象的部分 — 整体层次结构; - 你原创 2020-10-21 23:28:40 · 1040 阅读 · 0 评论 -
C++设计模式——备忘录模式(memento pattern)
博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可以阅读和提出建议。# 一、原理讲解别名Token。## 1.1意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。原创 2020-10-18 20:47:14 · 1393 阅读 · 0 评论 -
C++设计模式——状态模式(state pattern)
一、原理讲解别名状态对象(object for state)。1.1意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。1.2应用场景一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为;一个操作中含有庞大的分支语句的条件语句,且这些分支依赖于该对象的状态;1.3结构图(UML图)1.4代码实现步骤a1 定义一个状态接口类IState,定义一个接口函数handle();a2 定义一个具体状态类ConcreteState,实现接口函数handl原创 2020-10-09 21:31:06 · 1187 阅读 · 3 评论 -
C++设计模式——中介者模式(mediator pattern)
一、原理讲解1.1意图用一个中介对象来封装一系列的对象。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。1.2应用场景一组对象以定义良好但复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类;1.3结构图(UML图)1.4代码实现步骤a1 定义一个中介者接口类IMediator,定义两个接口函数send()和add()原创 2020-10-05 14:20:11 · 1360 阅读 · 0 评论 -
C++设计模式——适配器模式(adapter pattern)
一、原理讲解适配器模式别名为包装器(wrapper),分为类适配器(通过多继承实现)、对象适配器(组合方式实现),由于类适配器比较少用,本文主要讲解用的比较多的对象适配器。1.1意图将一个类的接口转换成客户希望的另一个接口。Adapter使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。1.2应用场景你想使用一个已经存在的类,而它的接口不符合你的需求;你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;(适用于对象Adapter)原创 2020-10-02 11:42:18 · 1144 阅读 · 0 评论 -
C++设计模式——门面模式(facade pattern)
一、原理讲解门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用。1.1意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个借口使得这一子系统更加容易使用。1.2应用场景当你要为一个复杂子系统提供一个简单接口时;客户程序与抽象类的实现部分之间存在着很大依赖性;当你需要构建一个层次的子系统时,使用Facade模式定义子系统中每层的入口点;1.3结构图(UML图)1.4代码实现步骤a1 定义一原创 2020-09-04 23:11:24 · 1272 阅读 · 0 评论 -
C++设计模式——享元模式(flyweight pattern)
# 一、原理讲解## 1.1意图运用共享技术有效地支持大量细粒度的对象。## 1.2应用场景 - 一个程序中使用了大量的对象; - 完全由于使用大量的对象造成很大的存储开销; - 对象的大多数状态都可变为外部状态; - 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象; - 应用程序不依赖于对象标识。## 1.3结构图(UML图) 
一、原理讲解由于单件模式也称为单例模式,分为懒汉式单例模式和饿汉式单例模式,两者主要区别是类对象的返回是在编译时创建?还是调用时才创建?其中,懒汉式单例模式是在程序调用时才创建,而饿汉式单例模式是在程序编译时期创建类实例。懒汉式是非线程安全的,而饿汉式是线程安全的。因为项目中用懒汉式比较多,所以本文主要总结的是懒汉式单例模式。饿汉式单例模式可以参考博主这篇文章:单例模式(饿汉式)1.1意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。1.2应用场景当一个类只有一个实例,而且客户端可以从一原创 2020-08-30 02:35:57 · 1764 阅读 · 0 评论 -
c++设计模式--构建器(builder pattern)
# 一、原理讲解## 1.1意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。## 1.2应用场景 - 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时; - 当构造过程必须允许被构造的对象有不同的表示时;## 1.3结构图(UML图) 
# 一、原理讲解原型模式其实就是对类对象某个时刻的状态进行备份或者拷贝下来。比如该类的对象进行一系列赋值操作,然后需要保存某个瞬时状态,则用原型模式克隆下来。其中类对象某个瞬时状态用*this表示,通过*this赋值给*proto,调用该类的拷贝构造函数进行原型拷贝。注意:函数返回*this和this区别 - 函数返回*this:实际上是返回该类对象的原型或者拷贝(返回值为Proto&或者Proto*),返回拷贝时调用的是类的拷贝构造函数Proto::Proto(const Proto& pro原创 2020-08-24 23:50:51 · 547 阅读 · 0 评论 -
c++设计模式--抽象工厂(abstract factory)
# 一、原理讲解为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。## 1.1意图定义一个创建对象的接口,让子类决定实例化哪个类。该模式使类对象的创建延迟到子类。## 1.2应用场景一个系统要独立于它的产品的创建、组合和表示时;一个系统要由多个产品系列中的一个来配置时;当你要强调一系列相关的产品对象的设计以便进行联合使用时;当你提供一个产品类库,而只想显示他们的接口而不是实现时;## 1.3结构图(UML图)
一、原理讲解工厂方法是简单工厂的改进,改进之处是每款产品对应一个工厂,该工厂只生产这一种产品,也就是只创建这个产品类对象。1.1意图定义一个创建对象的接口,让子类决定实例化哪个类。该模式使类对象的创建延迟到子类。1.2应用场景客户端不知道他所需要的对象的类; 需要将类的实例延迟到子类中实现,并且一类产品有许多形态。’1.3结构图(UML图)(后面补充)1.4代码实现步骤a1 定义一个抽象产品接口类IProduct,并且定义一个接口函数show()用于子类继承;(抽象.原创 2020-08-05 22:58:07 · 1605 阅读 · 0 评论 -
C++设计模式——简单工厂(simple factory)
一、原理讲解1.1意图将工厂内部逻辑简化,使用一个工厂在内部用if或者switch创建不同产品对象。1.2应用场景工厂类负责创建的产品对象比较少,不会造成工厂方法中内部逻辑复杂;客户端只需要传入工厂类的参数,对对象如何创建不感兴趣;1.3结构图(UML图)简单工厂UML图1.4代码实现步骤a1 定义一个抽象产品接口类IProduct,并且定义一个接口函数show()用于子类继承;(抽象产品类)a2 定义两个实现接口类IProductA和IProductB,都重写接口函数show()原创 2020-08-05 22:30:20 · 507 阅读 · 0 评论 -
C++设计模式——桥接模式(bridge pattern)
一、原理讲解1.1意图将抽象部分和实现部分分离,使它们可以独立的变化。(别名:handle/body)1.2应用场景当你不希望抽象和它的实现部分有一种紧密耦合关系,希望在运行时可以切换不同的实现; 类的抽象和实现都可以通过继承子类的方法进行扩充,这时可以选着桥接模式,运用组合方式分别对抽象和实现进行扩充; 当你像完全对客户隐藏抽象时,可以使用桥接模式;(继承时,抽象是可见的) 当你像抽象有多个扩展,实现也有多个方向扩展时使用。’1.3结构图(UML图)桥接模式UML图1.4原创 2020-06-20 21:35:45 · 2303 阅读 · 6 评论 -
C++设计模式——装饰模式(decorator pattern)
一、原理讲解图1 装饰者模式UML图1.1意图装饰模式目的是:动态地给一个对象添加一些额外的职责,比生成之类更灵活。1.2常用场景一般用于给某个对象添加某个功能,但是又不希望更改该对象底层抽象借口,同时该功能可以动态增删,这时可以考虑用装饰者模式。1.3实行方法如图1所示,装饰着Decorator通过继承抽象基类Component,又组合一个Component指针*component,通过重写从Component继承而来的虚函数operation(),在里面用指针调用oper.原创 2020-06-07 00:25:49 · 807 阅读 · 0 评论 -
C++设计模式——观察者模式(observer pattern)
一、原理讲解1.1意图定义一种“一对多”的关系。当一个对象(被观察者/发布者)的状态发生改变时,所有依赖它的对象都将得到通知并更新。又有别名为发布-订阅(publish-subscribe)。1.2应用场景一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中,以使它们可以独立的改变和复用 当一个对象改变,连带其它对象也跟着改变,但是不需要知道具体改变对象...原创 2020-03-22 23:58:53 · 1033 阅读 · 2 评论 -
C++设计模式——策略模式(strategy pattern)
一、原理讲解1.1意图定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化。1.2与模板方法区别模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合?设计模式八大原则之一:优先使用对象组合,而不是类继承。1.3设计步骤a1 先定义一个接口类最为抽象基类ABCa2 定义一系列算法...原创 2020-03-21 23:39:36 · 1156 阅读 · 0 评论 -
C++设计模式——模板方法(template method)
一、原理讲解模板方法的核心定义一个算法的骨架,而将一些细节方法延迟到之类中实现。其中,算法骨架是不变的部分,细节方法是变化的部分。设计模式的核心思想就是将变化部分和不变部分有效隔离、耦合出来。该思路的实现重要利用c++多态特性,运行时刻,基类指针指向不同的父类,则运行该父类重写的函数(前提:基类中是虚函数)。实现步骤如下:1.1定义一个抽象基类ABC;1.2抽象基类ABC定义两个抽象方...原创 2020-03-20 22:40:40 · 861 阅读 · 0 评论