12 2013 档案

摘要:一、功能 表示“部分-整体”关系,并使用户以一致的方式使用单个对象和组合对象。 二、结构图 上图中,也可以做些扩展,根据需要可以将Leaf和Composite做为抽象基类,从中派生出子类来。三、优缺点 优点:对于Composite模式,也许人们一开始的注意力会集中在它是如何实现组合对象的。但Composite最重要之处在于用户并不关心是组合对象还是单个对象,用户将以统一的方式进行处理,所以基类应是从单个对象和组合对象中提出的公共接口。 缺点:Composite最大的问题在于不容易限制组合中的组件。四、实现 有时需要限制组合中的组件,即希望一个Composite只能有某些特定的Lea... 阅读全文
posted @ 2013-12-12 07:35 尘虑萦心 阅读(262) 评论(0) 推荐(0)
摘要:一、功能 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 二、结构图 三、实现(1)在某些情况下,比如仅仅为了创建适当的Product对象而派生新的Creator子类,并且创建不同Product的方法一致时,可以考虑用模板代替继承。如: 1 class Creator 2 { 3 public: 4 virtual Product* CreateProduct() = 0 ; 5 }; 6 7 template 8 class ConcreteCreator: public Creator 9 {10 p... 阅读全文
posted @ 2013-12-11 07:27 尘虑萦心 阅读(199) 评论(0) 推荐(0)
摘要:一、功能 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、结构图 三、优缺点 优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况) 缺点:必须先有一个对象实例(即原型)才能clone。 四、示例代码class Prototype //抽象基类{public: virtual Prototype* Clone() = 0 ;} ;class ConcretePrototype1 : public Prototype{public: virtual Prototype* Clone() { C... 阅读全文
posted @ 2013-12-10 07:35 尘虑萦心 阅读(193) 评论(0) 推荐(0)
摘要:一、功能 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、结构图 各类之间的交互关系如下图所示: 三、示例代码 1 class Product1 { /*...*/ } ; 2 class Product2 { /*...*/ } ; 3 4 class Builder //抽象基类 5 { 6 public: 7 virtual void BuilderPartA() {} //提供缺省实现 8 virtual void BuilderPartB() {} 9 virtual void BuilderPartC() {}10 ... 阅读全文
posted @ 2013-12-10 07:13 尘虑萦心 阅读(266) 评论(0) 推荐(1)
摘要:一、功能 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、结构图 三、示例代码: 1 class Implementor 2 { 3 public: 4 virtual void OperationImp() = 0 ; 5 } ; 6 7 class ConcreteImplementorA : public Implementor 8 { 9 public:10 virtual void OperationImp() {}11 } ;12 13 class ConcreteImplementorB : public Implementor14 {15 p... 阅读全文
posted @ 2013-12-09 07:03 尘虑萦心 阅读(183) 评论(0) 推荐(0)
摘要:一、功能 保证一个类仅有一个实例。 二、结构图 三、优缺点 Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。 四、实现 教科书上的Singleton定义如下: 1 class Singleton 2 { 3 public: 4 static Singleton* Instance() ; 5 protected: 6 Singleton() {} 7 private: 8 static Singleton *_instance ;... 阅读全文
posted @ 2013-12-09 06:41 尘虑萦心 阅读(159) 评论(0) 推荐(0)
摘要:引言寻找问题的解的一种可靠的方法是首先列出所有候选解,然后依次检查每一个,在检查完所有或部分候选解后,即可找到所需要的解。理论上,当候选解数量有限并且通过检查所有或部分候选解能够得到所需解时,上述方法是可行的。不过,在实际应用中,很少使用这种方法,因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘),即便采用最快的计算机也只能解决规模很小的问题。对候选解进行系统检查的方法有多种,其中回溯和分枝定界法是比较常用的两种方法。按照这两种方法对候选解进行系统检查通常会使问题的求解时间大大减少(无论对于最坏情形还是对于一般情形)。事实上,这些方法可以使我们避免对很大的候选解集合进行检查,同时能够保 阅读全文
posted @ 2013-12-08 21:04 尘虑萦心 阅读(359) 评论(0) 推荐(0)
摘要:一、功能 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 二、结构图 类厂最基本的结构示意图如下: 在实际应用中,工厂模式可以扩充到很复杂的情况,如下图所示: 三、优缺点 优点:(1)封装创建过程。客户不用知道类厂是如何创建类实例的,工厂封闭了所有创建的细节。这样可选择不同的创建方法,增加了灵活性。 (2)将客户与具体类隔离,提高了各自的可重用性。 缺点:Factory类层次与具体类层次通常是平行的(即一一对应的)。增加一个具体类,一般也要相应地增加一个factory类,增加了系统复杂度。 四、实现 (1)Abstract Factory类中通常是一组F... 阅读全文
posted @ 2013-12-06 07:17 尘虑萦心 阅读(172) 评论(0) 推荐(0)
摘要:一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、结构图 (1)class adapter (2)object adapter 三、实现 和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它的某种具体结构图和实现。因为模式是灵活的,其实现可以是千变万化的,只是所谓万变不离其宗。 在STL中大量运用了Adapter模式,象function adapter、iterator adpter,它们与这里说的adapter结构并不一样,但思想是一样的。... 阅读全文
posted @ 2013-12-05 07:36 尘虑萦心 阅读(291) 评论(0) 推荐(0)
摘要:设计模式简介 设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。面向对象设计模式描述了面向对象设计过程中,特定场景下,类(抽象类之间,抽象类和派生类)之间或者相互通信的对象之间常见的组织关系。 对象是什么?----从概念层面讲,对象是某种拥有责任的抽象。----从规格层面讲,对象是一系列可以被其他对象使用的公共接口。----从语言实现层面来看,对象封装了代码和数据从设计原则到设计模式针对接口编程,而不是针对实现编程---- 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。优先使用对象组合,而不是类继承---- 类继承通常为“白箱复用”,对象组合通常为“黑箱.. 阅读全文
posted @ 2013-12-04 21:45 尘虑萦心 阅读(215) 评论(0) 推荐(0)