C++设计模式
文章平均质量分 86
攻城狮
这个作者很懒,什么都没留下…
展开
-
C++设计模式-工厂方法
定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(Factory Method)使一个类的实例化延迟到其子类。也叫虚构造器(Virtual Constructor) 结构 理解1. Product是工厂方法生产产品的抽象基类。2. Creator是生产产品的工厂对象抽象基类。Creator提供创建虚方法即工厂方法FactoryMeothod()。FactoryMeothod()由派生类(ConcreteCreator)具体实现,生产对应的具体产品(ConcreteP转载 2011-01-21 18:00:00 · 405 阅读 · 0 评论 -
c++设计模式(16)-TemplateMethod 模式
<br />作用:<br /> 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。<br /><br />UML结构图:<br /><br /><br />抽象基类:<br />1)AbstractClass:抽象基类,定义算法的轮廓<br /><br />解析:<br />TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计原创 2011-05-04 17:46:00 · 408 阅读 · 0 评论 -
c++设计模式(17)-Proxy模式
<br />作用:<br />为其他对象提供一种代理以控制对这个对象的访问。<br /><br />UML结构图:<br /><br /><br />抽象基类:<br /> 1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy.<br /><br />解析:<br /> Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一原创 2011-05-04 17:49:00 · 431 阅读 · 0 评论 -
c++设计模式(18)-Decorator模式
<br />作用:<br /> 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。<br /><br />UML结构图:<br /><br /><br />抽象基类:<br /> 1)Component:定义一个对象接口,可以为这个接口动态的添加职责.<br /> 2)Decorator:维持一个指向Component的指针,并且有一个和Component一致的接口函数.<br /><br />接口函数:<br />原创 2011-05-04 17:53:00 · 492 阅读 · 0 评论 -
c++设计模式(21)-Façade模式
<br /> 举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去n个地方办理n个手续(现在大学合并后就更加麻烦,因为可能那n个地方都隔的比较远)。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的、到什么地方去办理我们都不感兴趣。<br /> <br /> 实际上在软件系统开发中也经常回会遇到这样的情况,可能你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如A和B、C、D):A中实现了一些接口,B中实现一些接口(或者A代表原创 2011-05-04 18:35:00 · 1207 阅读 · 1 评论 -
c++设计模式(6)-Adapter
一、功能 <br /><br /> 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。<br /><br />二、结构图<br />(1)class adapter<br /><br /><br /><br />(2)object adapter <br /><br /><br /><br />三、实现<br /><br /> 和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它原创 2011-05-04 14:57:00 · 399 阅读 · 0 评论 -
c++设计模式(11)-Visitor模式
<br />作用:<br />表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.<br /><br />UML结构图:<br /><br /><br />解析:<br /> Visitor模式把对结点的访问封装成一个抽象基类,通过派生出不同的类生成新的访问方式.在实现的时候,在visitor抽象基类中声明了对所有不同结点进行访问的接口函数,如图中的VisitConcreateElementA函数等,这样也造成了Visitor模式的一个缺陷--原创 2011-05-04 17:20:00 · 539 阅读 · 0 评论 -
c++设计模式(4)-Prototype
一、功能 <br /><br /> 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 <br /><br />二、结构图<br /><br /><br /><br />三、优缺点<br /><br /> 优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况) <br /><br /> 缺点:必须先有一个对象实例(即原型)才能clone。<br /><br />四、示例代码<br />namespace DesignPattern_Prototype原创 2011-05-04 14:48:00 · 400 阅读 · 0 评论 -
c++设计模式(5)-Factory Method
一、功能 <br /><br /> 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。<br /><br />二、结构图<br /><br /><br /><br />三、实现<br /><br />(1)在某些情况下,比如仅仅为了创建适当的Product对象而派生新的Creator子类,并且创建不同Product的方法一致时,可以考虑用模板代替继承。如: <br /><br />class Creator <br />{<br />publ原创 2011-05-04 14:51:00 · 439 阅读 · 0 评论 -
c++设计模式(10)-Strategy模式
<br />作用:<br />定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.<br /><br />UML结构图:<br /><br /><br />解析:<br /> 简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.<br /><br />实现:<br />1)原创 2011-05-04 17:16:00 · 428 阅读 · 0 评论 -
c++设计模式(15)-ChainOfResponsibility模式
<br />作用:<br />使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.<br /><br />UML结构图:<br /><br /><br /><br />抽象基类:<br /> 1)Handler:定义一个处理请求的接口,在图中这个接口就是HandleRequset函数,这个类同时有一个指向Handler对象的指针,指向后续的处理请求的对象(如果有的话).<br /><br />解析:<br原创 2011-05-04 17:43:00 · 462 阅读 · 0 评论 -
c++设计模式(20)-Interpreter模式
<br /> 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统中进行的操作。Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。<br /> Interpreter模式提供了这样的一个实现语法解释器的框架,笔者曾经也正在构建一个编译系统Visual CMCS,现在已经发布了Visual CMCS1.0 (Beta),请大家访问Visual CMCS网站获取详细信息。2.原创 2011-05-04 18:33:00 · 779 阅读 · 0 评论 -
c++设计模式(14)-Flyweight模式
<br />作用:<br />运用共享技术有效地支持大量细粒度的对象。<br /><br />UML结构图:<br /><br /><br /><br />解析:<br /> Flyweight模式在大量使用一些可以被共享的对象的时候经常使用.比如,在QQ聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语敷衍别人,如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight就是基于解决这种问题的思路而产生的,当需要一个可以原创 2011-05-04 17:39:00 · 861 阅读 · 1 评论 -
c++设计模式(13)-Comnand模式
<br />作用:<br />将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.<br /><br />UML结构图:<br /><br /><br />解析:<br /> Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver类中,由调用这个命令的类也就是这里的Invoker类来调用.其实,如果弄清楚了Command模式的原理,就会发现其实它和注册回调原创 2011-05-04 17:34:00 · 622 阅读 · 0 评论 -
C++设计模式-工厂方法
定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(Factory Method)使一个类的实例化延迟到其子类。也叫虚构造器(Virtual Constructor) 结构 理解1. Product是工厂方法生产产品的抽象基类。2. Creator是生产产品的工厂对象抽象基类。Creator提供创建虚方法即工厂方法FactoryMeothod()。FactoryMeothod()由派生类(ConcreteCreator)具体实现,生产对应的具体产品(ConcreteP转载 2011-01-21 18:01:00 · 487 阅读 · 0 评论 -
C++设计模式 Adapter
<br />一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 <br />二、结构图<br /> (1)class adapter<br /><br /> (2)object adapter <br /><br /> 三、实现<br /> 和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它的某种具体结构图和实现。因为模式是灵活的,其实现可以是千变万化的转载 2011-01-21 17:22:00 · 464 阅读 · 0 评论 -
MVC模式和文档/视图结构
<br /> MVC(Model-View-Controller)模式的基本思想是数据,显示和处理相分离。模型(Model)负责数据管理,视图(View)负责数据显示,控制器(Controller)负责业务逻辑和响应策略。<br /> 从MVC的形成过程来看,最初只有模型和视图两个元素。模型封装了数据并提供操作接口,视图用来表现数据和接收用户请求。模型是独立的,而视图依赖于模型:从模型获取数据进行显示;向模型发送用户请求,并根据返回结果刷新自己。<br /> 需要用多个视原创 2011-01-30 16:15:00 · 926 阅读 · 0 评论 -
c++设计模式(1)-Singleton
一、功能 <br /> 保证一个类仅有一个实例。 <br /><br />二、结构图<br /><br /><br /><br />三、优缺点<br /> Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。<br /><br />四、实现<br /> 教科书上的Singleton定义如下: <br /><br />class Singleton<br />{<br />pub原创 2011-05-04 14:20:00 · 338 阅读 · 0 评论 -
c++设计模式(7)-Composite
一、功能 <br /><br /> 表示“部分-整体”关系,并使用户以一致的方式使用单个对象和组合对象。 <br /><br />二、结构图<br /><br /><br /><br />上图中,也可以做些扩展,根据需要可以将Leaf和Composite做为抽象基类,从中派生出子类来。 <br /><br />三、优缺点<br /><br /> 优点:对于Composite模式,也许人们一开始的注意力会集中在它是如何实现组合对象的。但Composite最重要之处在于用户并不关心是组合对象还是单个对象,用原创 2011-05-04 14:26:00 · 420 阅读 · 0 评论 -
c++设计模式(2)-Bridge
一、功能 <br /><br /> 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 <br /><br />二、结构图<br /><br /><br /><br />三、示例代码 <br /><br />namespace DesignPattern_Bridge<br />{<br /> // class Implementor<br /> class Implementor<br /> {<br /> public:<br原创 2011-05-04 14:33:00 · 387 阅读 · 0 评论 -
c++设计模式(3)-Builder
一、功能 <br /><br /> 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 <br /><br />二、结构图<br /><br /><br /><br />各类之间的交互关系如下图所示: <br /><br /><br /><br />三、示例代码<br /><br />namespace DesignPattern_Builder<br />{<br /> class Product1 { /*...*/ } ;<br /> cl原创 2011-05-04 14:44:00 · 354 阅读 · 0 评论 -
c++设计模式(7)-Memento模式
<br />作用:<br />在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.<br /><br />UML结构图:<br /><br /><br />解析:<br />Memento模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢复.原理很简单,实现的时候需要注意一个地方:窄接口和宽接口.所谓的宽接口就是一般意义上的接口,把对外的接口作为public成员;而窄接口反之,把接口作为private成员,而把需要访问这些接口函数的原创 2011-05-04 16:48:00 · 473 阅读 · 0 评论 -
c++设计模式(8)-Iterator模式
<br />作用:<br />提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示.<br /><br />UML结构图:<br /><br /><br />解析:<br /> Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必暴露容器的内部细节,具体是怎么做原创 2011-05-04 17:03:00 · 685 阅读 · 0 评论 -
c++设计模式(9)-State模式
<br />作用:<br />允许一个对象在其内部状态改变时改变它的行为.<br /><br />UML结构图:<br /><br /><br />解析:<br /> State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切原创 2011-05-04 17:11:00 · 473 阅读 · 0 评论 -
c++设计模式(12)-Observer模式
作用:<br />定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.<br /><br />UML结构图:<br /><br /><br /><br />解析:<br /> Observer模式定义的是一种一对多的关系,这里的一就是图中的Subject类,而多则是Obesrver类,当Subject类的状态发生变化的时候通知与之对应的Obesrver类们也去相应的更新状态,同时支持动态的添加和删除Observer对象的功能.Obesrver模原创 2011-05-04 17:27:00 · 406 阅读 · 0 评论