摘要: 说起单元测试,是代码重构,和开发一款稳定、高可维护性的软件所必需的部分。现在有好多单元测试的工具,可以用在不同的环境和不同的语言,如JUnit,NUnit,Boost_Test,这里简单介绍一下Google的Test工具,GTest。在gtest.h的末尾(#endif之前)添加如下语句://我自己添加的#ifdef _DEBUG#pragma comment(lib,"gtestd.lib")#else#pragma comment(lib,"gtest.lib") #endif//启动所有测试int main(int argc, char **arg 阅读全文
posted @ 2011-04-16 10:16 星晨_jqren 阅读(1800) 评论(0) 推荐(0) 编辑
摘要: 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数。详细的还是看代码吧。10.1.解释main(),客户CCarModel,产品模型CBenzModel,奔驰模型CBMWModel,宝马模型ICarBuilder,建造者接口CBenzBuilder,奔驰建造者CBMWBuilder,宝马建造者CDirector,导演说明:CCarModel实现模板方法,Builder负责开始建造产品。建造产品时,构建的顺序由Director或main决定。注意:建造者模式和抽象工厂非常类似。建造者更重视 阅读全文
posted @ 2011-04-15 23:05 星晨_jqren 阅读(7937) 评论(1) 推荐(1) 编辑
摘要: 模板模式也是相当简单的一种模式,而且是比较常用的。模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。cbf4life举的例子是悍马车模型,更详细的例子说明可以参考原作者博客:cbf4life.cnblogs.com。这里只提出C++的设计和实现方法,以方便随用随取。9.1.解释main(),客户CHummerModel,悍马模型CHummerH1Model,悍马模型型号1CHummerH2Model,悍马模型型号2说明:在CHummerModel声明Start、Engineboom、Ala 阅读全文
posted @ 2011-04-15 00:25 星晨_jqren 阅读(5777) 评论(1) 推荐(2) 编辑
摘要: 适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理。是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也是一个比较简单的模式,直接上代码了。看代码:8.1.解释main(),主程序IUserInfo,本系统内接口CUserInfo,本系统内实现类IOuterUser,外系统接口COuterUser,外系统实现类COuterUserInfo,本系统内适配类说明:COuterUserInfo实现IUserInfo接口,将外部系统实现类COuterUser转换成本系统内的接口IUserInfo。使用外部 阅读全文
posted @ 2011-04-13 21:51 星晨_jqren 阅读(7690) 评论(1) 推荐(3) 编辑
摘要: 抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。看代码:7.1.解释main(),女娲IHuman,产品接口CYellowHuman,抽象产品之一CYellowFemaleHuman,具体产品之一CYellowMaleHuman,具体产品之二CWhiteHuman,抽象产品之二CWhiteFemaleHuman,具体产品之三CWhiteMaleHuman,具体产品之四CBlackHuman,抽象产品之三CBlackFemaleHuman,具体产品之五CBlackMaleHuman,具体产品 阅读全文
posted @ 2011-04-13 21:10 星晨_jqren 阅读(9465) 评论(5) 推荐(3) 编辑
摘要: Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。这里举了一个发送邮件的例子,我们理解为电子邮件吧,普通的邮件应该不需要告诉邮局,我们写的信件内容(呵呵有点较真了)。这个例子更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。9.1.解释main(),客户ILetterProcess,接口CLetterProces 阅读全文
posted @ 2011-04-12 22:23 星晨_jqren 阅读(8758) 评论(3) 推荐(3) 编辑
摘要: 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。这个例子更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。贴代码了。5.1.解释main(),女娲IHuman,产品接口CYellowHuman,产品之一CWhiteHuman,产品之二CBlackHuman,产品之三IHumanFactory,工厂接口CYellowHumanFactory,工厂之 阅读全文
posted @ 2011-04-11 22:37 星晨_jqren 阅读(14359) 评论(4) 推荐(4) 编辑
摘要: 多例模式,这个在GOF的模式设计里没有提到,但在实际工作中确实会用到。更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。4.1.解释main(),客户略说明:和单例基本一样,是有个数限制的单例。如果对于产生的实例个数没有限制,那就不是多例了,和普通的类没有区别。举例:曾经开发过一个从服务端以UDP协议,发送文件到客户端的程序。客户端连接服务端时采用TCP协议,服务端接受连接,产生一个向客户端传输文件的实例FileService。每个客户端的连接都会产生一个实例,但同一客户端的多个连接请求会共享一个FileService实例。理论上讲FileService实例的个数 阅读全文
posted @ 2011-04-11 00:13 星晨_jqren 阅读(9387) 评论(0) 推荐(1) 编辑
摘要: 单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了。更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。3.1.解释main(),大臣CEmperor,需要单例的类说明:很多大臣拜见的皇帝,只有一个。体现在面向对象方面,CEmperor定义一个静态指针,和一个静态函数,私有化构造函数、析构函数、构造函数复制、重载赋值语句。注意:线程安全,采用互斥体的方式实现。看代码://Emperor.h#pragma once#include <iostream>using std::cout;using std::endl 阅读全文
posted @ 2011-04-09 22:30 星晨_jqren 阅读(18056) 评论(11) 推荐(5) 编辑
摘要: 顺便测试一下Windows Live Writer.貌似很好用的样子。//BaseCommon.h#pragma once#include <iostream>#ifdef BASECOMMON_EXPORTS#define BASECOMMON_API __declspec(dllexport)#else#define BASECOMMON_API __declspec(dllimport)#endifnamespace safee{ class BASECOMMON_API CConvert { public: CConvert(void); ~CConvert(void); 阅读全文
posted @ 2011-04-08 23:38 星晨_jqren 阅读(1945) 评论(0) 推荐(0) 编辑