读书笔记-大话设计模式
DIY-GEEKER
若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒
展开
-
策略模式
//策略基类class COperation{ public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; }};//策略具体类—加法类class AddOperation:publicCOperation{public: AddOpe原创 2015-03-30 17:39:36 · 543 阅读 · 0 评论 -
桥接模式
GOOD:将抽象部分与实现部分分离,使它们可以独立变化。 这里说的意思不是让抽象基类与具体类分离,而是现实系统可能有多角度分类, 每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦 合性,即如果继承不能实现“开放-封闭原则”的话,就应该考虑用桥接模式。#include <iostream>#include <string>using namespace std;原创 2015-04-02 07:54:12 · 559 阅读 · 0 评论 -
享元模式
#include <iostream>#include <string>#include <map>using namespace std;class Flyweight{public: virtual void operation(int)=0;};class ConcreteFlyweight:public Flyweight{ void operation(int原创 2015-04-02 16:56:28 · 569 阅读 · 0 评论 -
工厂方法模式
GOOD:修正了简单工厂模式中不遵守开放-封闭原则。工厂方法模式把选择判 断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端即可。 #include #include using namespace std;class LeiFeng{public: void sweep() { cout<<"扫地"<<endl; } void wash()原创 2015-03-31 11:55:52 · 425 阅读 · 0 评论 -
观察者模式
#include <iostream>#include <string>#include <list>using namespace std;class Subject;class Observer{protected: string name; Subject *sub;public: Observer(string name,Subject *sub)原创 2015-03-31 17:14:09 · 415 阅读 · 0 评论 -
迭代器模式
#include <iostream>#include <string>using namespace std;class Iterator;class Aggregate{public: virtual Iterator *createIterator()=0;};class Iterator{public: virtual void first()=0; v原创 2015-04-02 07:22:14 · 477 阅读 · 0 评论 -
命令模式
#include <iostream>#include <string>#include <list>using namespace std;class Barbecuer{public: void bakeMutton() { cout<<"烤羊肉串"<<endl; } void bakeChickenWing() {原创 2015-04-02 08:03:11 · 492 阅读 · 0 评论 -
中介者模式
#include<iostream>#include <string>using namespace std;class Mediator;class ConcreteColleague1;class ConcreteColleague2;class Colleague{protected: Mediator *mediator;public: Colleague(Me原创 2015-04-02 16:50:57 · 526 阅读 · 0 评论 -
责任链模式
#include<iostream>#include <string>using namespace std;class Request{public: string requestType; string requestContent; int number;};class Manager{protected: string name; Man原创 2015-04-02 08:28:29 · 513 阅读 · 0 评论 -
解释器模式
#include <iostream>#include <list>#include <string>using namespace std;class Context;class AbstractExpression{public: virtual void interpret(Context *)=0;};class TerminalExpression:public Abs原创 2015-04-02 16:59:44 · 531 阅读 · 0 评论 -
抽象工厂模式
#include <iostream>#include <string>using namespace std;class IUser{public: virtual void getUser()=0; virtual void setUser()=0;};class SqlUser:public IUser{public: void getUser()原创 2015-03-31 23:33:02 · 545 阅读 · 0 评论 -
单例模式
GOOD:保证一个类仅有一个实例,并提供一个访问它的全局访问点 #include <iostream>#include <string>using namespace std;class Singleton{ private: int i; static Singleton *instance; Singleton(int i) { thi原创 2015-04-02 07:50:10 · 520 阅读 · 0 评论 -
原型模式
GOOD: 从一个对象再创建另外一个可定制的对象, 而无需知道任何创建的细节。 并能提高创建的性能。 说白了就 COPY 技术,把一个对象完整的 COPY 出一份。 #include #include using namespace std;class Prototype{private: string str;public: Prototype(string s) {原创 2015-03-31 12:07:53 · 528 阅读 · 0 评论 -
设计模式和工厂模式的结合
//策略基类class COperation{ public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; }};//策略具体类—加法类class AddOperation:publicCOperation{public: AddOpe原创 2015-03-30 18:09:50 · 513 阅读 · 0 评论 -
简单工厂模式
#include #include using namespace std;class Operation{public: double numberA,numberB; virtual double getResult() { return 0; }};class addOperation:public Operation{ double getResult(原创 2015-03-30 16:29:42 · 460 阅读 · 0 评论 -
代理模式
GOOD:远程代理,可以隐藏一个对象在不同地址空间的事实虚拟代理:通过代理来存放需要很长时间实例化的对象 安全代理:用来控制真实对象的访问权限 智能引用:当调用真实对象时,代理处理另外一些事#include #include using?namespace std //定义接口 class Interface?{ public: virtu原创 2015-03-31 11:38:41 · 418 阅读 · 0 评论 -
适配器模式
#include <iostream>#include <string>using namespace std;class Adaptee{public: virtual void myRequest() { cout<<"实际上的接口"<<endl; }};class Target{public: virtual void reques原创 2015-04-01 23:21:25 · 458 阅读 · 0 评论 -
备忘录模式
#include <iostream>#include <string>#include <vector>using namespace std;class Memo{public: string state; Memo(string state) { this->state=state; }};class Originator{pub原创 2015-04-01 23:53:15 · 559 阅读 · 0 评论 -
组合模式
#include <iostream>#include <vector>#include <string>using namespace std;class Component{public: string name; Component(string name) { this->name=name; } virtual void a原创 2015-04-02 00:23:42 · 477 阅读 · 0 评论 -
模板方法模式
GOOD: 把不变的代码部分都转移到父类中, 将可变的代码用 virtual 留到子类重写 .#include#include #include using namespace std;class AbstractClass{public: void Show() { cout<<"我是"<<GetName()<<endl; }protected: virtua原创 2015-03-31 14:49:53 · 433 阅读 · 0 评论 -
外观模式
GOOD:为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。#include #include using namespace std;class Sub1{public: void f1() { cout<<"子系统的方法 1"<<endl; }};class Sub2{public: void f2() { cout<<"子系统的方法 2原创 2015-03-31 14:58:47 · 442 阅读 · 0 评论 -
建造者模式(生成器模式)
#include #include #include using namespace std;class Product{private: vector product;public: void add(string str) { product.push_back(str); } void show() { vector::iterator iter=pr原创 2015-03-31 15:43:31 · 510 阅读 · 0 评论 -
修饰模式
GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能) ,就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 #include #include using n原创 2015-03-31 10:39:49 · 702 阅读 · 0 评论 -
状态模式
#include <iostream>#include <string>using namespace std;class Work;class State;class ForenonnState;class State{public: virtual void writeProgram(Work*)=0;};class Work{public: int hour原创 2015-04-01 19:10:13 · 531 阅读 · 0 评论