初探设计模式(C++实现)
C++代码实现各种设计模式,结合实际用途写例子。
此专栏为下一步深入探讨设计模式的基石。
最近将代码更新到GitHub上。
https://github.com/bentan2013/try-cpp-design-pattern
iuhsihsow
行路难!行路难!多歧路,今安在?
长风破浪会有时,直挂云帆济沧海。
展开
-
初探设计模式(C++实现)专栏索引
由于专栏里面文章较多,所以建立一个索引,以备参考:代码地址:bentan2013/try-cpp-design-pattern专栏目录:Refer to iuhsihsow 的设计模式专栏名称blog link前言前言Abstract Factory抽象工厂模式Adapter适配器模式Bridge桥接模式Builder建造者模式Chain Of Respon...原创 2018-03-28 22:16:52 · 372 阅读 · 0 评论 -
c++设计模式系列前言
举的例子是工作中会碰到的问题,或者是大话设计模式中本来就存在的例子。c++的设计模式和C# Java相比还是有一定区别的,应该深入分析。例如,在原有的基础上,1. 加上c++语言方面的特性。2. 能使用c++新标准让代码简洁,明确。3. 做一个进阶版本,重点在于工程化和复用性。4. 加上详细的文字版的原理, 利用代码的长度,可读性,可复用性来突出设计模式的优原创 2016-11-03 13:32:33 · 878 阅读 · 0 评论 -
设计模式之代理模式,C++实现
原创:http://blog.csdn.net/iuhsihsow这一篇主要参照了《大话设计模式》//代理模式:为其他对象提供一种代理以控制这个对象的访问 //简而言之就是给对象加一个壳 //1.远程代理 //2.虚拟代理 //3.安全代理 //4.智能指引 //问1:代理模式和聚合关系有什么区别,感觉适配器模式也能解决类似问题?原创 2012-11-29 09:32:45 · 1862 阅读 · 1 评论 -
单件模式的基类,C++
看《游戏编程精粹1》中间有一段代码#include // 一个单件模式的模板类 template class SingleTon { public: static T* ms_SingleTon; SingleTon() { assert(!ms_SingleTon); int offset = (int)(T*)1 - (int)(S原创 2013-01-25 23:54:36 · 2643 阅读 · 1 评论 -
设计模式之状态模式,C++实现
代码:这次代码质量不佳啊,估计是应用场景选择错误了。// StateMode.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #ifdef _DEBUG#define _CRTDBG_MAP_ALLOC#include #include #define new new(_NORMAL_BLOCK, __FI原创 2013-01-31 15:55:05 · 992 阅读 · 0 评论 -
设计模式之桥接模式
将整体里面的可能变化的部分抽象出来其实个人对桥接模式不是很理解,貌似接触的里面没有这么复杂的结构不过还是多用聚合,少用继承吧。(总觉得聚合组合比较好管理,一个好的继承是需要千锤百炼的,多重继承,多层继承的内存消耗不可小觑)自己对这个模式都没有怎么理解,那么写出的代码估计也不敢恭维,不过还是写下来,作为记录吧。// Bridge.cpp : Defines t原创 2013-02-01 16:23:03 · 1017 阅读 · 0 评论 -
设计模式之组合模式
想不出组合模式优缺点,我觉得和一般的树形结构都差不多。恩,不,还是有不同的,一般的二叉树和四叉树,他们的节点都是属于同一类型一般的树class Node{public:Node* pParent;std::list subNodeList;};组合模式:class Component{public:Add(Component* p原创 2013-01-31 23:05:37 · 929 阅读 · 0 评论 -
设计模式之迭代器模式,C++下的讨论
C++ stl里面有迭代器,看stl源码貌似更好,泛型编程嘛有机会写一段解析stl源码的体会。写了一部分关于stl中迭代的代码http://blog.csdn.net/iuhsihsow/article/details/8664123原创 2013-01-31 23:07:22 · 870 阅读 · 0 评论 -
设计模式之访问者模式,C++实现
设计模式不能滥用啊先借一张图// Visitor.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"// 访问者模式(vistor), 表示一个作用于某对象结构中的各元素的操作,// 它使你可以在不改变各元素类的前提下定义作用于这些元素的操作// 假设一个绘制软件,只能够绘制线面两种类型的图形// 但是每个图形都原创 2013-03-11 09:32:30 · 3018 阅读 · 0 评论 -
设计模式之解释器模式,C++实现
借用下设计模式的图代码表示不是比较正规的实现。不过设计模式嘛,随心而设计,差不多是那个意思,“认真你就输了// Interpert.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include using namespace原创 2013-03-10 19:53:19 · 2789 阅读 · 0 评论 -
设计模式之Decorator,C++
原创 http://blog.csdn.net/iuhsihsow多多关注哦最近重构程序,必须得研究下设计模式,于是写了一个C++例子。//装饰模式 //动态的给一个对象添加一些额外的职责, //就添加功能来说,装饰模式比生成子类更加灵活 //(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以和真实对象相同的方式和装饰对象交互。原创 2012-11-28 17:10:22 · 1346 阅读 · 0 评论 -
设计模式之策略模式,C++实现
原创: http://blog.csdn.net/iuhsihsow//策略模式 //抽象出算法 //可适应算放的频繁改动 //问1:和简单工厂有什么区别?//答1:策略模式主要是将算法提炼出来,一个大的context中可以包括多个算法,便于context中算法的的自由配置, //一次配置,多次使用,维持context的稳定性。 //简单类工厂模式主要原创 2012-11-29 09:35:58 · 1273 阅读 · 0 评论 -
设计模式之简单工厂模式,C++实现
原创http://blog.csdn.net/iuhsihsow只上图和代码吧#include "stdafx.h" #include enum EOperator { ADD_OPER, SUB_OPER }; class MathOperator { public: MathOperator(){;} virtual原创 2012-11-29 09:38:03 · 1399 阅读 · 0 评论 -
设计模式之原型模式,C++实现
原创:http://blog.csdn.net/iuhsihsow其实个人觉得原型模式在C++也就那样吧。反正设计一个类,如果有需要都会重载=或者设置深拷贝函数。所以就简单写一下吧。示意图,UML还是不太会代码:#include "stdafx.h" #include #include #include #include #in原创 2012-12-07 13:23:54 · 2293 阅读 · 0 评论 -
设计模式之模板方法模式,C++实现
原创 http://blog.csdn.net/iuhsihsow一种比较简单的模式,恩,就简单的写个了例子。参照《C++ primer》和《大话设计模式》类图,这次直接抄了个图以下是代码// 模板方法模式, 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 // 模板方法使得子类可以不改变一个算法的结构既可冲定义该算法的某些特定步骤。原创 2012-12-11 15:03:14 · 2005 阅读 · 0 评论 -
设计模式之外观模式
原文地址: http://blog.csdn.net/iuhsihsow外观模式主要是用于对底层细节的封装,当然,要结合每个系统的上层应用。比如很多三维软件就是对DX或者OpenGL的底层细节进行了封装,可以这么说吧下面是类图下面是代码// 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式 // 定义了一个高程接口,这个原创 2012-12-12 09:32:11 · 1691 阅读 · 3 评论 -
设计模式之建造者模式,C++实现
原文地址: http://blog.csdn.net/iuhsihsow其实一直在文中注明C++实现确实没有太大意义,无非是C++用指针来实现多态而非对象本身。今天事情比较多,就偷下懒吧。抄的《大话设计模式》的图下面是实现代码,恩,基本上也是抄的。照着敲了一遍。// 建造者模式(Builder),将一个复杂对象的构造与它的表示分离, // 使得原创 2012-12-13 10:04:15 · 1299 阅读 · 0 评论 -
设计模式之观察者模式,C++实现(上部分)
原文地址: http://blog.csdn.net/iuhsihsow说起观察者模式犹如黄河之水,滔滔不绝,一发而不可收拾啊。今天先写上半部分,明天写事件委托。直接上代码,感谢scl的分享// 观察者模式定义了一种一对多的依赖,让多个观察者对象同时监听某一个 // 主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使 //原创 2012-12-14 18:05:00 · 2421 阅读 · 2 评论 -
设计模式之观察者模式,C++实现(下部分)
原文地址: http://blog.csdn.net/iuhsihsow恩,这部分就是单纯的委托了直接贴代码// 委托就是i一种引用方法的类型,一旦为委托分配了方法,委托将与 // 该方法具有完全相同的行为,委托方法的使用可以像其他任何方法一样, // 具有参数和返回值,委托可以看做是对函数的抽象,是函数的“类”,委托 // 的实例代表一个具体的函数 // 委托原创 2012-12-15 17:51:55 · 1391 阅读 · 0 评论 -
设计模式之抽象工厂,C++实现(一)
本部分就说明最简单的抽象工厂实现,当然在实际项目应用中不会这么做,仅为解释该模式。上图的抽象 工厂有两个工厂,分别生产对应的ProductA和ProductB(可以假想为蓝色或者红色的两种产品A22 = 4)下面为简单代码示例// 抽象工厂模式(Abstract Factory),提供一个创建 // 一系列相关或相互依赖对象的接口,而无需指定他们具体的类原创 2013-01-05 22:59:20 · 1300 阅读 · 0 评论 -
设计模式之适配器,C++实现
大家应该用得比较多,就只上代码// AdapterMode.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"// 适配器模式(Adapter),将一个类的借口转换成客户端希望// 的另外一个借口,适配器模式使得原本由于借口不兼容而不能// 一起工作的那些类可以一起工作// 说白了,就是改名// 情景假设:一个计算类的派生类由原创 2013-01-31 16:22:08 · 1078 阅读 · 0 评论 -
设计模式之备忘录
原理也比较简单,就是提取类的一部分信息作为一个备份// Memento.cpp : Defines the entry point for the console application.//#include "stdafx.h"// 备忘录模式(Memento): 再不跑坏封装性的前提下// 捕获一个对象的内部状态, 并在对象之外保存这个状态//原创 2013-01-31 22:09:33 · 1010 阅读 · 0 评论 -
设计模式之单例模式
单例模式是为了防止类被多次创建。例如系统中的log日志类,就可以创建一个单例的做为系统主日志。http://blog.csdn.net/iuhsihsow/article/details/8543742原创 2013-01-31 23:12:05 · 1034 阅读 · 0 评论 -
设计模式之命令模式,C++实现
命令模式应该是应用比较广泛的模式各种编辑操作都会用到,可以将实现与操作分离,解析用户操作为一部分代码,实现用户操作的目的又封装到另外一个地方,或者是命令模式的派生类或者是对象自身内部《大话设计模式》中的贴图代码:// Command.cpp : Defines the entry point for the console application.//原创 2013-01-31 23:46:25 · 2032 阅读 · 1 评论 -
设计模式之享元模式,C++实现
享元模式很常见,是一种减小内存的方式,大到三维场景中的一个房子,小到文字处理系统中的一个英文字母,都可以使用享元模式。借鉴一下《大话设计模式》中的uml图吧下面是代码:// Flyweight.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include usin原创 2013-03-04 16:57:39 · 2493 阅读 · 0 评论