Design Pattern 设计模式
靖心
降低成功的时间复杂度,提高生活的空间复杂度
专注,努力不会白费的!
展开
-
Design Pattern 设计模式1 - Strategy 1
实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数Strategy设计的思路:基类A,更加小的基类B,新的继承类C:1 从基类A中抽出一个更加小的基类B2 利用这个更加小的基类B实现不同的效果3 把这个更加小的基类B包含进基类A中去4 新的继承类C只需要和基类A打交道,设计不同行为,不需要理会更加小的基类B原创 2014-05-11 17:06:14 · 1004 阅读 · 0 评论 -
Flyweight Design Pattern 共享元设计模式
就是利用一个类来完成多种任务,不用每次都创建一个新类。个人觉得这个设计模式在C++里面,好像可以就使用一个函数代替,利用反复调用这个函数完成任务和反复利用这个类,好像差不多。不过既然是一个设计模式,那么就使用类来完成任务。而对于Java来说是不面向过程的,故此就必须使用这个设计模式了。我这里设计一个仓库来保存这样的类,需要的时候反复取出来使用。非常简单的设计模式:#inclu原创 2014-07-26 10:02:52 · 1295 阅读 · 1 评论 -
Design Pattern Command 命令设计模式
本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作。也可以进一步利用map和自己喜欢的命令词对接起来。一个执行类实际上已经包含了所有需要的操作了,如:class SuperMaker{public: string makeCar() { return "Car"; } string makePlane() { return "Plane";原创 2014-07-27 07:47:10 · 1489 阅读 · 0 评论 -
Design Pattern Bridge 桥设计模式
桥设计模式其实就是一个简单的has a relationship,就是一个类拥有另一个类,并使用另一个类实现需要的功能。比如遥控器和电视之间可以使用桥设计模式达到可以使用同一个遥控器控制多台电视机的目的。这样的设计思想是多种设计模式反反复复使用基本思想。仔细思考下会发现多种设计模式的底层思想其实是相通的,不过具体实现或者某些细节,应用等有那么一点差别罢了。下面就实现一个TV和rem原创 2014-07-28 08:29:19 · 1562 阅读 · 0 评论 -
Design Pattern Prototype 原型设计模式
Prototype设计模式其实就是利用一个深拷贝的功能,在原有的类中,通过一个clone函数,创建一个新的类,并可以利用好原有的数据。这样可以轻易clone出多个新的对象操作,而且都有各自的内存空间。#include #include using namespace std;class MultiData{protected: bool b; char c; s原创 2014-08-02 16:24:50 · 1416 阅读 · 0 评论 -
Design Pattern Memo 备忘录设计模式
本设计模式就是简单地记录当前状态,然后利用记录的数据恢复。比如首先我们有一个类,类需要记录当前状态进行相关的工作的:class Memo;class Human{public: string state; Memo *makeMemo(); void restroDataFromMemo(Memo *m); void show() { cout<<"State: "<原创 2014-07-10 08:53:00 · 4042 阅读 · 0 评论 -
Abstract Factory Design Pattern 抽象工厂设计模式 - 总结
Abstract Factory Design Pattern 就是一般的Factory Design Pattern的进一步设计,增加一个抽象工厂,然后利用这个工厂可以创建不同基类的类。当我们需要创建更多不同类的时候就可以使用这个设计模式了。这个设计模式的代码相对会多点,但是其中的思想就是一般Factory Design Pattern,然后集合更多的基类,看起来挺大的一个设计模式,其思原创 2014-08-02 17:11:55 · 1506 阅读 · 0 评论 -
State Design Pattern 状态设计模式2
其实本设计模式可以实现一些像人工智能式的问答。这个跟人回答问题差不多,根据不同的问题作出不同的回答,而且在不同的状态,也会作出不同的回答。如果有大量的数据,那么就可以作出千变万化的问答效果来哦。#include enum STATE{ HUNGARY, EAT, FULL};class State{ STATE myState;public: State(STA原创 2014-08-02 16:29:33 · 983 阅读 · 0 评论 -
Proxy Design Pattern 代理设计模式
代理设计模式,这个模式很多用于服务器客户端之类的,上网也经常使用代理之类的,想起来感觉是很复杂的,不过这个设置模式本身是很简单的。就是一个类调用另外一个类的函数,客户调用的是一个类,而实际的工作是由另外一个类做的。体现这个设计模式的代码:#include class RealObj{public: virtual void handleReq() = 0;};原创 2014-07-13 09:22:55 · 1355 阅读 · 0 评论 -
Composite Design Pattern 组合设计模式
组合设计模式,就是可以把多个类组合在一个大类中,形成一个树形结构。#include #include #include using namespace std;class Coporate{protected: string name; set coporate;public: explicit Coporate(string n = "", string d原创 2014-07-12 12:20:13 · 1449 阅读 · 0 评论 -
Design Pattern Visitor 访问者模式
访问者模式,就是我们已经有一系列的对象了,那么就可以使用一个visitor对象一次性遍历所有的对象,就好像这个visitor访问了所有这些对象一样,所以就叫访问者模式。实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类。下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类。#include #incl原创 2014-07-11 09:32:09 · 1191 阅读 · 0 评论 -
Design Pattern Visitor 访问者设计模式
访问者设计模式是已经有了一组Person对象了,然后不同的访问者访问这组对象,会有不同效果。这些访问者实际上就是一个可以让Person对象组执行的动作行为等。至于这些Person对象是如何执行这些访问者的动作的,那是已经在特定的不同的Person对象中设计好的。比如我们的访问者也许是一些动作集合的类,如:class Action{public: string present;原创 2014-07-25 20:54:26 · 986 阅读 · 0 评论 -
design pattern Builder 建造者设计模式
其实设计模式可以学的很有意思的,不需要非得如此硬枯燥地去啃FOG的大部头,当然这些骨头啃啃也健康。本文利用建造者模式设计一个有趣的场景,一个利用这个模式去学功夫的过程,呵呵。首先设计一个基类,学功夫先要有基础嘛:class 功夫{public: virtual void 看招() = 0;};有了基础之后,我们就可以学习高级功法了,这里学习降龙十八掌,O(∩_∩)O原创 2014-06-16 15:31:05 · 1135 阅读 · 0 评论 -
Design Pattern Singleton 单一模式
单一模式的几个注意点:一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类。二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的。三) 这个唯一的类必须是要静态的程序:#ifndef _SINGLETON_H#define _SINGLETON_H#include #include using原创 2014-06-01 14:00:14 · 1238 阅读 · 0 评论 -
Design Pattern Adaptor 适配器设计模式
适配器设计模式是为了要使用一个旧的接口,也许这个接口很难用,也许是和新的更新的接口不兼容,所以需要设计一个适配器类,然后就可以让新旧的接口都统一。就是这样的一个图:比如我们有这样的一个旧的类:class OldName{public: virtual void setName(string n) = 0; virtual string getName() = 0;};原创 2014-06-02 22:09:42 · 1556 阅读 · 0 评论 -
Design Pattern Facade 门面设计模式
Facade设计模式主要作用是因为有个很难使用的类,然后要设计一个新类,整理好这个类,使得其更好使用。比如有类如此:class MessyClass{ char *name;public: MessyClass() : name(new char[3]) { for (int i = 0; i < 3; i++) { name[i] = ' '; } }原创 2014-06-04 09:48:24 · 1111 阅读 · 0 评论 -
Design Pattern Iterator 迭代器设计模式
这个设计模式感觉非常简单,我们平时写程序的时候也是经常需要调用iterator的,C++和Java都是。所以感觉没什么特别的,就是需要模仿C++或者Java的iterator类的功能吧。这里简单写个,使用C++模仿Java的iterator一些功能,呵呵。首先我们有一个集合类,而这个集合类包含了其他类,当我们需要遍历这个集合类包含的类的时候,就好使用iterator功能了。比如有一原创 2014-06-25 16:13:39 · 1232 阅读 · 0 评论 -
Design Pattern - Observer 观察者设计模式
Spy on enemy.使用这个模式可以根据某些事件自动更新。设计思路:1 设计一个基类,作为需要观察一个时间行为的接口类2 设计一个观察者类,可以观察所有基类的衍生类, 这里使用set来保存这些需要更新的类。一个事件相当于一个函数,事件发生(调用函数)同时自动调用需要更新的函数动作。#pragma once#include #include #inclu原创 2014-05-22 18:45:56 · 1167 阅读 · 0 评论 -
Design Pattern - Factory - 设计模式 - 工厂
Create All kinds of guns.设计重点:1 基类作接口2 继承类是各种不同的类3 构建工厂类,然后根据需要创造不同的类,可以传入关键字,或者索引等。#pragma once#include #include using namespace std;//Base classclass Gun{public: virtual stri原创 2014-05-21 18:58:02 · 1058 阅读 · 0 评论 -
State Design Pattern 状态设计模式
设置好内部状态,然后根据不同的函数作为行为模式,进行状态转换。有点像Finite Automata算法,两者的思想是一样的。会Finite Automata,那么这个设计模式就很容易了。#pragma once#include #include #include #include enum STATES{ FULLY_RENTED, WAITING, GOT_A原创 2014-07-02 13:57:59 · 975 阅读 · 0 评论 -
Design Pattern Template 模板设计模式
模板设计模式,可以顾名思义,就是要先有个模板,然后可以利用这个模板类做出自己需要的类,通过尽量少的修改。所以先定义一个模板类:class MachineTemplate{public: void go() { startup(); getParts(); assemble(); testing(); ending(); } virtual void sta原创 2014-06-12 21:25:33 · 1028 阅读 · 0 评论 -
Design Pattern 设计模式 Decorator 装饰者模式
1 设计一个基类2 继承这个基类,并包含这个基类的一个对象3 创建继承类的时候,初始化这个基类,因为是基类指针,所以可以是所有基类的衍生类对象,那么就可以叠加任意多个衍生类对象了。关键是在衍生类中包含一个基类对象,然后有了继承和包含两重关系,可以使得一个类一个类对象叠加,达到装饰目的。等于是创建了一个对象指针链表,一个一个对象发挥其相应的作用。下面程序装饰一个桌原创 2014-05-28 12:04:46 · 1159 阅读 · 0 评论 -
Design Pattern Chain of Reponsibility 责任链模式
本程序实现一个责任链模式查询人名的资料。开始都是查询第一个人,问其是否有某人的资料,如果有就返回结果,如果没有第一个人就会询问第二个人,第二个人的行为和第一个人的行为一致的,然后一致传递下去,直到找到答案,或者是最后没有资料,返回。首先创建一个基类://base class class Person{public: virtual void getInfo(string原创 2014-05-31 15:50:18 · 1214 阅读 · 0 评论 -
Design Pattern Interpreter 解析者模式
解析者本身是一个很大的设计模式,重点在于设计这个解析者本身,但是由于解析者本身很难设计,故此完善的解析者模式比较少应用,但是这个设计模式本身的思想却不难。下面简单实用C++实现一下解析者模式,使用不同的解析者,那么就会对于同样的内容解析出不同的结果。#include #include using namespace std;class Context{public:原创 2014-07-25 17:02:45 · 1105 阅读 · 0 评论 -
Mediator Design Pattern 中介者模式
就是设计一个Mediator类,可以处理其他类的关系。Mediator类:1 拥有其他所有类的实例对象2 设置一个接口供其他类使用,其他类也拥有一个Mediator类成员,只需调用这个Mediator接口函数使用,无需自己处理关系。3 Mediator内部已经设置好各个类的关系了,其他类只要直接使用Mediator处理关系就可以了。下面是一个聊天室聊天是处理关系的实例程序:原创 2014-07-14 09:33:48 · 1140 阅读 · 0 评论