设计模式
文章平均质量分 74
xujiali5172923
这个作者很懒,什么都没留下…
展开
-
(二)策略模式
请见源码和注释: #include "stdafx.h" #include #include #include //为了应用智能指针 using namespace std; //策略模式:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化 //不会影响到使用算法的客户。 // 下面这个例子展示的是商场收银系统,为了支持某商品可以支持多种活动,采用策略模式。 //原创 2015-09-15 15:19:10 · 328 阅读 · 0 评论 -
(十五)组合模式
定义:组合模式(composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。【DP】 UML类图: 源码实现: // Composite.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include us原创 2016-03-04 14:49:52 · 260 阅读 · 0 评论 -
(二十三)解释器模式
定义:解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 UML: // Interpreter.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; struct Context { st原创 2016-03-29 17:13:58 · 285 阅读 · 0 评论 -
(十六)迭代器模式
定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。[DP] UML: 举例: 例子描述,当一个表演团队要进入会场进行表演前,都需要查验入场证件,那么不管这个团队的人员身份如何,都需要按人头查验,如队员,教练,导演等。 那么就可以实现成迭代器的模式。 // Iterator.cpp : 定义控制台应用程序的入口点。 // #原创 2016-03-07 11:10:47 · 235 阅读 · 0 评论 -
(十)观察者模式
描述:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。【DP】UML类图: 具体源码如下:// Observer.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <iostream> #include <memory> #include原创 2016-02-22 14:24:47 · 249 阅读 · 0 评论 -
(十七)单例模式
定义:单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。【DP】 UML: 源码: // Singleton.cpp #include using namespace std; #define OS_IS_WINDOWS #if defined(OS_IS_WINDOWS) #include CRITICAL_SECTION g_c原创 2016-03-08 11:16:02 · 395 阅读 · 0 评论 -
(二十二)享元模式
享元模式(flyweight),运用共享技术有效地支持大量细粒度的对象。【DP】 UML: 源码: // Flyweight.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; //网站 class WebSite { public:原创 2016-03-21 09:46:23 · 305 阅读 · 0 评论 -
(十八)桥接模式
桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。【DP】 解释:抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。【DPE】 UML类图: 举例: 现代战争中出现了隐身战斗机,但是雷达技术的发展,也产生了专门探测隐身战机的雷达--米波雷达。 那么就有两种雷达,常规雷达和米原创 2016-03-10 10:38:48 · 244 阅读 · 0 评论 -
(十一)抽象工厂模式
抽象工厂模式(Abstract Factory),提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。【DP】 我的理解:从C++的角度来看的话,可能是这样的,有两组相互依赖的对象,这两组对象都有自己的抽象类,而客户端在使用时,只需知道这两组抽象类即可。 这样就与细节解耦了。 UML类图: 从上图看,抽象工厂和抽象产品有依赖原创 2016-02-25 14:28:50 · 317 阅读 · 0 评论 -
(十九)命令模式
定义:命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行 参数化;对请求排队或记录请求日志,以及支持可撤销的操作。【DP】 UML: 基本代码: // Command.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; class Rece原创 2016-03-14 14:51:53 · 288 阅读 · 0 评论 -
(二十)职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。【DP】 // ResponsbilityChain.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using原创 2016-03-14 15:45:11 · 312 阅读 · 0 评论 -
(二十一)中介者模式
中介者(Mediator),用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。【DP】 UML: 源码: // Mediator.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std;原创 2016-03-16 16:10:28 · 469 阅读 · 0 评论 -
(九)建造者模式
描述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。[DP]我的理解,比如建造一个产品,有一些必要的部分组成,如自行车有前后两个轮子和车架,那么不论我生产山地车,还是公路车都需要建造这些部分,只是表示形式不同而已,那么可以把建造前后轮子和车架的接口抽象出来,然后定义山地车和公路车两种类作为生产线,而总经理只需要关心,我要造什么特种自行车就行了,具体的建造细节交给两种生产线原创 2016-02-17 17:07:34 · 249 阅读 · 0 评论 -
(三)装饰模式
见注释: // test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include //为了应用智能指针 using namespace std; //装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 //装饰模式是为已有功能动态添加更多功能的一种方式。 //原创 2015-09-15 18:08:28 · 292 阅读 · 0 评论 -
(四)工厂方法模式
见源码和注释: //工厂方法模式 /* 工厂方法模式之精髓: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。 什么情况下用呢: 能用到简单工厂的地方都能用到。 优点: 相比较简单工厂而言: 简单工厂模式其特点是在工厂类中包含了必要的逻辑判断,根据客户端动态选择 实例化相关的类,出去了客户端与其功能的依赖; 但如果要增加一个新的功能,则必须要增加工厂原创 2015-09-17 09:25:48 · 274 阅读 · 0 评论 -
(五)代理模式
好久没有更新设计模式了,今天心情不错,继续~~~Gof对于代理模式的总述: 代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。[DP] Client:不谈了 IFuncion:是个抽象类,定义了接口的虚方法。 CRealEntity:继承IFunction接口类,是代理模式中要控制的对象的抽象。 CProxy:代理类,继承IFunction接口类,用以最终给客户端调用原创 2016-01-28 10:12:14 · 282 阅读 · 0 评论 -
(一)简单工厂模式
见源码注释: #include "stdafx.h" #include #include #include //为了应用智能指针 using namespace std; //COperation:抽象的算术类。用来代表工厂制造出的抽象产品。 //CAddOperation、CSubOperation:具体的算术类。用来代表工厂制造出的具体产品。 //CSimpleFactory:工厂类,原创 2015-09-10 18:05:25 · 378 阅读 · 0 评论 -
(十二)状态模式
// State.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include using namespace std; class Context; class State { public: virtual ~State(){} virtual void Handle(Cont原创 2016-02-29 17:57:29 · 266 阅读 · 0 评论 -
(十三)适配器模式
F4定义:适配器模式(Adpter),将一个类的接口转换成客户希望的另外一个接口。Adpter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【DP】 UML类图: 下面是我写的例子(例子的原理通过注释就可以知晓): // Adpter.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include原创 2016-03-01 16:00:05 · 277 阅读 · 0 评论 -
(六)原型模式
原型模式(prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。[DP]UML类图: 代码:// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include "stdafx.h" #include <string> #include <iostream> #include <memo原创 2016-01-29 18:10:00 · 569 阅读 · 0 评论 -
(七)模板方法模式
定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。[DP]我的理解:在父类中定义一个给客户端调用的方法,改方法需要调用一系列子步骤实现,由于为了不同的业务需要,总方法不变,顺序也不变,但是具体的方法需要做针对性调整,这时把那些具体方法在父类中抽象出来,然后在各个子类中重写。哈哈,实际上,我们如果经常写OOD C++的话,应原创 2016-02-01 10:49:53 · 302 阅读 · 0 评论 -
(十四)备忘录模式
定义:备忘录(memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。【DP】 UML定义: 我的例子: 以一个游戏进度保存的例子来说明,游戏中有一个游戏角色,含有生命力,攻击力和防御力三种属性,但是为了防止打boss失败,需要先保存游戏进度,假设这些都发生在内存中,实际上是发生在硬盘中的,那么应用设计模式,原创 2016-03-03 11:07:53 · 255 阅读 · 0 评论 -
(八)外观模式
权威定义:外观模式(facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP]定义不是很容易理解,下面结合UML和例子来理解吧~~ 下面根据大话设计模式的说法,举个例子。先看源码:// Facade.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <iostream> #in原创 2016-02-16 15:49:30 · 290 阅读 · 0 评论 -
(二十四)访问者模式
访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的心操作。【DP】 // Visitor.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; class ConcreteElementA; class C原创 2016-04-13 09:52:04 · 243 阅读 · 0 评论