设计模式
litanyuan
这个作者很懒,什么都没留下…
展开
-
设计模式的 C++ 实现---访问者模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式状态模式命令模式建造者模式桥接模式解释器模式前言访问者模式的本质就是想给一系列对象添加新的方法,但是又不想在原来类代码中进行增加,即保持既有的类不变,把要添加的方法再新的类中进行实现。所谓访问者就是一系列行为的统称,通过多态实现多种行为的添加,通过函数重载实现针对不同对象的特定行为的调原创 2020-09-15 10:34:24 · 195 阅读 · 0 评论 -
设计模式的 C++ 实现---解释器模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式状态模式命令模式建造者模式桥接模式前言解释器模式的本质就是把一个依据确定规则组成的一个字符串翻译为计算机可执行的语句。实现举例场景描述输入一个四则运算的字符串,比如:a-10+b*(c+5) ,解析并返回计算结果。表达式抽象基类#include <string>原创 2020-09-14 17:54:57 · 255 阅读 · 0 评论 -
设计模式的 C++ 实现---桥接模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式状态模式命令模式建造者模式前言桥接模式体现了对一个既有类进行扩展是的原则:除非有更好的理由采用继承的方式(有虚函数需要重新实现、有受保护成员需要访问),否则就采用组合的方式进行扩展。Pimpl 惯用法:将类的接口和实现进行解耦,是桥接模式的一种特例。实现举例场景描述假设一个简单的日原创 2020-09-13 10:25:12 · 161 阅读 · 0 评论 -
设计模式的 C++ 实现---建造者模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式状态模式命令模式前言建造者模式的本质是一个对象的构造过程是相对不变的、客户端只是对象的消费者,不关心对象的创建过程,仅提出需求获取对象即可,每一种需求即为一张配方,根据配方进行对象的创建。实现举例场景描述以电脑组装过程为例:电脑的构成是不变的,但根据配置需求可以有不同的组装方式。对象原创 2020-09-12 17:26:56 · 158 阅读 · 0 评论 -
设计模式的 C++ 实现---命令模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式状态模式前言所谓命令就是调用某个对象的某个操作,命令模式就是加一个中间对象把一系列要调用的方法先存储起来,以对命令进行控制记录等操作。可以把命令封装成一个对象,也可以直接使用成员函数指针。实现举例场景描述定义一个绘画的对象 painter ,有画线、画圆、画矩形等操作。命令执行者#原创 2020-09-12 15:09:41 · 163 阅读 · 0 评论 -
设计模式的 C++ 实现---状态模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式策略模式前言所谓状态可以理解为对象的成员数据,可以是一个或者多个成员数据的组合,不同的状态值下对象表现出不同的行为方式。状态模式体现了封装变化的原则,状态封装了对象的行为规则,特定状态对应特定的行为,行为反过来又可以影响状态,即状态切换。实现举例场景描述假设一个简单的论坛使用场景:论坛有登陆、退原创 2020-09-12 11:54:23 · 157 阅读 · 0 评论 -
设计模式的 C++ 实现---策略模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式装饰者模式前言所谓策略即解决一件事情的算法、或者方法,是一些具有相同签名的函数,把策略封装成对象(可以是类对象、也可以是任何形式的可调用对象),这样便可把策略定义为类的数据成员,就可以动态的设置数据成员的值,即更换策略。实现举例场景描述假设一个简单的游戏场景:玩家角色有攻击的动作,但根据装配武器的不同,会有不原创 2020-09-11 19:15:27 · 191 阅读 · 0 评论 -
设计模式的 C++ 实现---装饰者模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式代理模式前言装饰者模式的本质和代理模式的原理是一样的,体现了对一个既有类进行扩展是的原则:除非有更好的理由采用继承的方式(有虚函数需要重新实现、有受保护成员需要访问),否则就采用构成的方式进行扩展。装饰器和原对象都继承自同一个基类,对外表现为一样的接口,但在原有方法的基础上进行了扩展。实现举例场景描述假设一个指针鸡蛋原创 2020-09-11 15:10:11 · 164 阅读 · 0 评论 -
设计模式的 C++ 实现---代理模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式中介者模式前言代理模式即用一个类对象全权代表另外一个类对象,把真正干活的对象隐藏在幕后。代理对象和被代理的对象都是继承自同一基类,对外表现为相同的接口。代理模式的本质是对被代理对象的一个再包装,可以滞后一个方法的调用操作,从而可以在调用前或者调用后增加一些控制方法,而对客户端来说和使用实际对象并没有区别。实现举例场景描述假设一个原创 2020-09-11 09:28:59 · 126 阅读 · 0 评论 -
设计模式的 C++ 实现---中介者模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式外观模式前言中介者模式主要用于多个对象之间的交互,所谓交互就是会互相调用对方的接口方法。中介者模式体现了最少知识原则,通过第三方来进行交互,避免了互为数据成员。实现举例场景描述假设一个在线购物场景:有买家、卖家、购物网站三个角色,其中购物网站即为中介者,买家和卖家互不认识,但是都知道同一个购物网站。抽象同事类卖家和买家可以继承自同一个基原创 2020-09-10 19:08:50 · 164 阅读 · 0 评论 -
设计模式的 C++ 实现---外观模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)原型模式前言外观模式本质就是对一系列子系统或者一组方法的进一步封装,使客户端的不需要知道子系统的实现细节,达到“一键操作”的目的。实现举例子系统1#include <iostream>using namespace std;class SubSystemOne{public: SubSystemOne(){}原创 2020-09-10 14:37:35 · 147 阅读 · 0 评论 -
设计模式的 C++ 实现---原型模式
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)抽象工厂模式(二)前言原型模式指直接用一个已经存在的对象来创建一个新的对象、然后对新对象进行稍微修改即可,类似复制的操作。由于继承体系的存在,并且拷贝构造函数不能是真正的虚拟函数。因此需要定义一个概念上的“虚拟拷贝构造函数”,以满足多态的使用需求,这个虚拟的拷贝构造函数用真正的拷贝构造函数来实现。实现举例基类#include <string>#incl原创 2020-09-10 11:13:54 · 140 阅读 · 0 评论 -
设计模式的 C++ 实现---抽象工厂模式(二)
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)抽象工厂模式(一)前言在抽象工厂模式中,需要增加一个产品类时,需要同时增加好几个类,并且系列工厂类和客户端都得修改。可以使用简单工厂模式对抽象工厂进行改进。实现举例场景描述假设一个简单的数据管理系统:有两个 Student (学生表)和 Grades(分数)两个对象表,一般对于一个对象表需要提供了对数据库操作(增、删、改、查)的类,然而在使用过程中数据库是可能进行更换的,比如 Acces原创 2020-09-10 10:31:35 · 217 阅读 · 0 评论 -
设计模式的 C++ 实现---抽象工厂模式(一)
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)工厂方法模式(二)前言工厂方法模式中一个工厂只负责生产一种产品,在抽象工厂模式中一个工厂可以生产一系列的产品。实现举例场景描述假设一个简单的数据管理系统:有两个 Student (学生表)和 Grades(分数)两个对象表,一般对于一个对象表需要提供了对数据库操作(增、删、改、查)的类,然而在使用过程中数据库是可能进行更换的,比如 Access 切换到 Oracel。产品类①.Student 类cl原创 2020-09-10 09:30:03 · 168 阅读 · 0 评论 -
设计模式的 C++ 实现---工厂方法模式(二)
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式工厂方法模式(一)前言对于工厂方法模式,当增加新产品时,也需要对应增加一个工厂类。可以使用模版进行封装,减少代码工作量。实现举例产品抽象基类class Animal{public: virtual ~Animal(){} virtual void show() = 0;};产品派生类①.Dog 类#include "animal.h"#include <iostream>us原创 2020-09-09 17:19:41 · 137 阅读 · 0 评论 -
设计模式的 C++ 实现---工厂方法模式(一)
前文回顾单例模式(一)单例模式(二)观察者模式简单工厂模式前言工厂模式通常适用于需要创建大量对象的情况,若仅需要一个对象,直接 new 即可。对于简单工厂模式,当需要增加新的产品时,需要对工厂类进行修改,违背了“开闭原则:对修改关闭、对扩展开发”。工厂方法模式是对简单工厂的进一步抽象和封装。实现举例产品抽象基类class Animal{public: virtual ~Animal(){} virtual void show() = 0;};产品派生类原创 2020-09-09 17:01:29 · 173 阅读 · 0 评论 -
设计模式的 C++ 实现---简单工厂模式
前文回顾单例模式(一)单例模式(二)观察者模式前言当客户端只是进行对象的使用,并不关心对象的构造过程,即:提出要什么对象、然后返回对应结果,并不关心这个对象怎么来的,此时即可采用简单工厂模式。可以模仿 C# 中的反射机制,根据类型名称调用相应方法得到对象实例。实现举例抽象基类class Animal{public: virtual ~Animal(){} virtual void show() = 0;};实现派生类①.Dog 类#include原创 2020-09-09 11:52:58 · 178 阅读 · 0 评论 -
设计模式的 C++ 实现---观察者模式
前文回顾单例模式(一)单例模式(二)前言当一个对象的状态发生改变时会影响到其他一系列对象的状态或者行为发生变化,希望这一过程可以自动且实时实现时,可以采用观察者模式。实现举例场景描述假设一个简单的游戏场景:游戏中有英雄、宠物、怪物、宝箱 4 个角色。其中:英雄可以移动、宠物自动跟随角色移动、英雄移动到距离怪物一定范围时,怪物进行攻击、英雄移动到距离宝箱一定范围时,宝箱自动打开。委托类模仿 C# 中的委托机制,用来保存一系列可调用对象。template< typename F&g原创 2020-09-04 19:53:05 · 261 阅读 · 0 评论 -
设计模式的 C++ 实现---单例模式(二)
前文回顾单例模式(一)前言上篇文章记录了 C++ 中限制一个类只生成一个实例的方法,本文在此基础上进行扩展:限制某个类最多只能有 n 个实例对象。限制类对象个数实现说明①.对象创建会调用构造函数,对象销毁会调用析构函数,因此可以在构造和析构函数中进行数量的记录。②.使用静态成员变量记录类的实例数量。③.构造函数定义为 private,然后提供另外的构造函数用于创建对象。代码示例class Anyleton{public: class TooManyObj{};//异常原创 2020-09-04 19:32:54 · 164 阅读 · 0 评论 -
设计模式的 C++ 实现---单例模式(一)
前言在一些应用场景下需要控制某个类只能有一个实例对象,本文记录下实现方法。单例类实现说明①.构造函数定义为 private,另外提供获取对象实例的方法;②.拷贝构造函数、拷贝赋值运算符定义为 delete,阻止拷贝赋值操作。③.使用静态局部变量,只有使用时才会创建对象。代码示例class Singleton{public: ~Singleton(){ cout << "调用了析构函数" <<endl;} Singleton(const Sin原创 2020-09-04 19:27:45 · 204 阅读 · 0 评论