摘要:引言:当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)Composite(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。实例:View Code 1 #include <iostream> 2 using namespace std; 3 #include <list> 4 5 class CComponent 6 { 7 public: 8 virtual void Operation() = 0; 9 virtual void Add(CCompone
阅读全文
文章分类 - 设计模式
讲述常见设计模式
摘要:引言: 多款安装了手机游戏和通讯录软件的不同种手机,怎去抽象出它的实现形式呢?有2种思路可循: (1) 按品牌抽象 手机品牌-->手机品牌X-->带有软件Y的手机品牌X (2)按软件抽象 手机软件-->手机软件Y-->在手机品牌X上运行的手机软件Y由于实现的方式有多种,而且先抽象谁效率高不清楚(因为品牌和软件都很多,很难知道谁多谁少),这时,增加品牌或软件都需要增加很多类的开销,Bridge模式正好能很好地解决此问题。Bridge模式(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。问题:你都让它独立变化了,那还怎么让它们产生关系?之前已经说过,类与类
阅读全文
摘要:引言: 面向对象编程都提倡重用性,有很多老的旧项目要重用到新的项目上来,老的项目有很多地方适合,然而接口不符...Adapt模式(适配器模式): 将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实例:View Code 1 class CAdaptee 2 { 3 public: 4 void SpecificRequest() 5 { 6 cout<<"This is a special request."<<endl; 7 } 8 }; 9 10 class CITarget1
阅读全文
摘要:引言: 当只需一个对象的唯一实例时(如弹出式菜单,不该让它点击一次就实例化一次),"全局变量+判断"不是很好的策略,毕竟C++不提倡全局,这时Singleton模式就是首选... Singleton模式(单一实例): 保证一个类仅有一个实例,并提供一个访问它的全局访问点。实例:class CSingleton;class CSingleton {private: CSingleton() { } CSingleton(const CSingleton &rObj) { }public: static CSingleton& GetInstance() { r
阅读全文
摘要:引言: 当客户端需要重复打印大量相同或者相似的内容时(如打印机打印多份试卷),是否要在客户端写上相同的多份代码呢?显然不是了...Prototype模式(原型模式):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。实例:CIPrototype接口类View Code 1 class CIPrototype 2 {3 public:4 CIPrototype();5 virtual ~CIPrototype();6 virtual CIPrototype* Clone() = 0;7 };CConcreatePrototype具体类View Code 1...
阅读全文
摘要:引言: 一个产品(如电脑)有几个必要的部件组成,如:CPU、内存、显示器等等,部件相同,而其实现不同,这就造就了品牌,怎样抽象出这样的模型呢?Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。实现(核心部分)CBuilder抽象类View Code 1 class CBuilder 2 { 3 public: 4 CBuilder(); 5 virtual ~CBuilder(); 6 7 virtual void BilderPartA() = 0; 8 virtual void BilderPartB() = ...
阅读全文
摘要:引言:工作中常会遇到这种情况,我们用Sqlserver 操作各种表,某天,老板跑来,嘿嘿的说:用户改用Access了,我们得满足用户的需要,员工们顿时陷入沉思中...AbstractFactory模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.接口实现(1)User接口View Code 1 // IUser.h: interface for the CIUser class. 2 // 3 ////////////////////////////////////////////////////////////////////// 4 5 #if !defined..
阅读全文
摘要:作用: 定义一个用于创建对象的的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。(1)ProductView Code 1 // Product.h: interface for the CProduct class. 2 // 3 ////////////////////////////////////////////////////////////////////// 4 5 #if !defined(AFX_PRODUCT_H__C6FF5C69_D54B_4447_AFBE_36B336CF7E92__INCLUDED_) 6 #defin..
阅读全文

浙公网安备 33010602011771号