随笔分类 -  大话设计模式 学习

摘要:GOOD:整体和部分可以被一致对待(如WORD中复制一个文字、一段文字、一篇文章都是一样的操作)#ifndef __COMPOSITE_MODEL__#define __COMPOSITE_MODEL__ #include #include #include using namespace std;class Component{public: string m_strName; Component(string strName) { m_strName = strName; } virtual void add(Component* com) = ... 阅读全文
posted @ 2013-11-15 00:27 解放1949 阅读(179) 评论(0) 推荐(0)
摘要:#ifndef __ABSTRACT_FACTORY_MODEL__#define __ABSTRACT_FACTORY_MODEL__#include #include #include using namespace std;/*GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。用于交换产品系列,如ACCESS->SQL SERVER;产品的具体类名被具体工厂的实现分离*///用户抽象接口class IUser{public: virtual void getUser() = 0; virtual void insertUser() = 0;};//部... 阅读全文
posted @ 2013-11-13 23:50 解放1949 阅读(148) 评论(0) 推荐(0)
摘要:#ifndef __ADAPTER_MODEL__#define __ADAPTER_MODEL__#include using namespace std;//GOOD:双方都不适合修改的时候,可以考虑使用适配器模式class Target{public: virtual void request(){ coutspecificalRequest(); Target::request(); }};#endif //__ADAPTER_MODEL__/*#include "Adapter.h"int _tmain(int argc, _TCHAR* argv[]){A... 阅读全文
posted @ 2013-11-13 23:49 解放1949 阅读(136) 评论(0) 推荐(0)
摘要:GOOD:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。#ifndef __MEMO_MODEL__#define __MEMO_MODEL__#include #include using namespace std;/*GOOD:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。适用于功能 阅读全文
posted @ 2013-11-13 23:44 解放1949 阅读(179) 评论(0) 推荐(0)
摘要:#ifndef __STATE_MODEL__#define __STATE_MODEL__#include using namespace std;/*GOOD:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可考虑用到状态模式。*/class Work;class ForenoonState;class NoonState;class State{public: virtual void writeProgram(Work* w) = 0;};class Work{private: State* current;public: double h... 阅读全文
posted @ 2013-11-10 22:48 解放1949 阅读(170) 评论(0) 推荐(0)
摘要:#ifndef __OBSERVER_MODEL__#define __OBSERVER_MODEL__#include #include #include using namespace std;/*GOOD:定义了一种一对多的关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书), 主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。*/class Secretary;//看股票的同事类(观察对象,观察者)class StockObserver{private: string name; Secretary* sub;public: StockObser... 阅读全文
posted @ 2013-11-10 21:18 解放1949 阅读(179) 评论(0) 推荐(0)
摘要:#ifndef __BUILDER_MODEL__#define __BUILDER_MODEL__#include #include #include using namespace std;class Product{private: vector m_product;public: void add(string strtemp) { m_product.push_back(strtemp); } void show() { vector::iterator iter = m_product.begin(); ... 阅读全文
posted @ 2013-11-08 10:47 解放1949 阅读(156) 评论(0) 推荐(0)
摘要:#ifndef __FACADE_MODEL__#define __FACADE_MODEL__#include using namespace std;//GOOD:为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。class SubSystemOne{public: void methodOne(){ coutmethodOne(); sub2->methodTwo(); sub3->methodThree(); }private: SubSystemOne* sub1; SubSystemTwo* sub2; SubS... 阅读全文
posted @ 2013-11-03 16:43 解放1949 阅读(114) 评论(0) 推荐(0)
摘要:#ifndef __TEMOLATE_METHOD_MODEL__#define __TEMOLATE_METHOD_MODEL__#include #include using namespace std;/*GOOD:把不变的代码部分都转移到父类中,将可变的代码用virtual留到子类重写迪米特法则:如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。在类的结构设计上,每一个类都应该尽量降低成员的访问权限。*/class AbstractClass{public: void show() { ... 阅读全文
posted @ 2013-11-03 16:07 解放1949 阅读(159) 评论(0) 推荐(0)
摘要:GOOD:从一个对象再创建另外一个可定制的对象,而无需知道任何创建的细节。并能提高创建的性能。说白了就COPY技术,把一个对象完整的COPY出一份。#ifndef __PROTOTYPE_MODEL__#define __PROTOTYPE_MODEL__#include #include using namespace std;class Prototype{private: string m_strName;public: Prototype(string strName){ m_strName = strName; } Prototype(){ m_strName = ... 阅读全文
posted @ 2013-10-31 00:23 解放1949 阅读(139) 评论(0) 推荐(0)
摘要:GOOD:修正了简单工厂模式中不遵守开放-封闭原则。工厂方法模式把选择判断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端即可。简单工厂是个什么东东,工厂模式是个什么西西,在这东东西西之间,存在着怎样南南北北的关系。下面就让我们揭开工厂方法模式的面纱,然后你可以同之前的简单工厂进行比较,看看他们之间的区别,比较一下各自的优缺点#ifndef __FACTORY_METHOD_MODEL__#define __FACTORY_METHOD_MODEL__#include using namespace std;//实例基类 相当于Productclass LeiFeng{p 阅读全文
posted @ 2013-10-30 00:03 解放1949 阅读(168) 评论(0) 推荐(0)
摘要:#ifndef __PROXY_MODEL_H__#define __PROXY_MODEL_H__#include using namespace std;class Subject{ virtual void request() = 0;};class RealSubject : public Subject{public: void request(){ coutrequest(); }};#endif //__PROXY_MODEL_H__/*//《客户端》#include "ProxyModel.h"int _tmain(int argc, _TCHAR* arg 阅读全文
posted @ 2013-10-23 23:15 解放1949 阅读(152) 评论(0) 推荐(0)
摘要:#ifndef __DECORATOR__#define __DECORATOR__#include #include using namespace std;//人class Person{public: Person(string strName) { m_strName = strName; } Person(){} virtual void show() { coutshow(); }};class TShirts : public Finery{public: virtual void show() {... 阅读全文
posted @ 2013-10-22 23:09 解放1949 阅读(158) 评论(0) 推荐(0)
摘要:#ifndef __STRATEGY_MODEL__#define __STRATEGY_MODEL__//策略基类class Operation{public: double m_nFirst; double m_nSecond; virtual double getResult() { double dResult = 0; return dResult; }};//策略具体类 加法类class AddOperation : public Operation{public: AddOperation(int a, int b)... 阅读全文
posted @ 2013-10-21 22:17 解放1949 阅读(156) 评论(0) 推荐(0)
摘要:主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。advantage:适用于不同情况创建不同的类时disadvantage:客户端必须要知道基类和工厂类,耦合性差#ifndef __SIMPLE_FACTORY_MODEL__#define __SIMPLE_FACTORY_MODEL__//运算类class Operation{public: virtual double getResult() = 0;public: double numberA; double num... 阅读全文
posted @ 2013-08-25 22:46 解放1949 阅读(130) 评论(0) 推荐(0)