设计模式
Phoenix_FuliMa
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记
1. 策略模式:定义算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。2. 观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。3. 装饰者模式:动态的将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另一种选择。4. 抽象工厂模式:提供一个原创 2012-02-03 17:14:29 · 757 阅读 · 0 评论 -
C++实现装饰者模式
/* 外观模式:为子系统的一组接口提供一个一致的界面, 此模式定义了一个高层接口,这个接口使得子系统更容易使用*/#include using namespace std;class TestA{public: void display_a() { cout<<"display a..."<<endl; }};class TestB{public: voi原创 2012-11-06 16:57:36 · 716 阅读 · 0 评论 -
C++实现观察者模式—2
多个主题对象,每个主题对象都有三个观察者,感觉有点问题,说不好。有问题请提出来。/* 观察者模式:定义一种一对多的依赖,让多个观察者同时观察一个对象,当对象状态发生变化时, 会通知所有它的观察者*/#include #include #include using namespace std;class Subject;class Observer{protect原创 2012-11-07 20:44:51 · 829 阅读 · 0 评论 -
C++实现观察者模式
/* 观察者模式:定义一种一对多的依赖,让多个观察者对象同时监听某一个主题对象,这个主题对象发生变化时, 会通知所有观察者对象,使得他们能够自动更新自己*/#include #include #include #include using namespace std;class Observer{public: virtual void Update() {} };原创 2012-11-07 20:02:09 · 767 阅读 · 0 评论 -
C++实现抽象工厂模式
/* 抽象工厂模式:创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类 Created by Phoenix_FuliMa*/#include using namespace std;class ProductA{public: virtual void display() {}};class ProductA_1:public ProductA{publi原创 2012-11-09 20:35:34 · 743 阅读 · 0 评论 -
C++实现适配器模式
/* 适配器模式:将一个接口装换为客户希望的接口,使得两个原本不能一起工作的类可以一起工作. 适配器提供客户类需要的接口,适配器的实现就是把客户类的请求转化为对适配者的相应接口的 调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而 这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于接口不兼 容而不能交互的类可以一起工作。这就是原创 2012-11-11 09:21:10 · 707 阅读 · 0 评论 -
C++实现备忘录模式
/* 备忘录模式:在不破坏一个对象的封装性的前提下,获取一个对象的内部状态,并将其保存在对象之外, 使得对象可以恢复到原先保存的状态。 Created by Phoenix_FuliMa*/#include #include using namespace std;class Memento{private: string state;public: Memento原创 2012-11-11 19:30:17 · 1210 阅读 · 0 评论 -
C++实现状态模式
/* 状态模式:当一个对象的内在状态发生变化时,允许改变其行为,这个对象看来像是改变了其类。 状态模式与策略模式的UML图几乎一模一样,下面列举了两者的不同(来自网络) (1)可以通过环境类状态的个数来决定是使用策略模式还是状态模式。 (2)策略模式的环境类自己选择一个具体策略类,具体策略类无须关心环境类;而状态模式的环 境类由于外在因素需要放进一个具体状态中,以便通过其方法实原创 2012-11-11 09:04:07 · 906 阅读 · 0 评论 -
C++实现组合模式
/* 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用用户对单个对象和 组合对象的使用具有一致性。 Created by Phoenix_FuliMa*/#include #include #include using namespace std;class Component{protected: string name;public:原创 2012-11-13 09:17:57 · 1665 阅读 · 0 评论 -
C++实现单例模式
/* 单例模式:确保一个类只有一个实例,并提供一个全局访问方式 说明: 在一个系统中要求一个类只有一个实例时才应当使用单例模式。 反过来,如果一个类可以有几个实例共存,就需要对单例模式进 行改进,使之成为多例模式(控制实例的数据,并提供全局的访问 方式)。 注释:下面的方式不支持多线程操作,要支持多线程需要再GetInstance 方式内加上锁机制 Created by Phoe原创 2012-11-15 09:05:25 · 1343 阅读 · 2 评论 -
C++实现桥接模式
/* 桥接模式:将抽象部分与它的实现部分相分离,他们可以独立变化。 合成/聚合复用原则CARP原则:面向对象设计的一个重要原则: 尽量使用合成/聚合,尽量不用使用类的继承 优点: (1)分离抽象接口及其实现部分。 (2)桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则 (即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的 个数非常庞大,桥接模式是原创 2012-11-17 15:25:34 · 3025 阅读 · 0 评论 -
C++实现命令模式
/* 命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对可以进行参数化,对请求排队或者记录请求日志 以及支持可撤销的操作 Created by Phoenix_FuliMa*/#include using namespace std;class Receiver{public: virtual void Action() { cout<<"Receiver原创 2012-11-17 16:17:39 · 1684 阅读 · 0 评论 -
C++实现中介者模式
/* 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各个对系那个不需要显示的相互引用, 从而使其耦合松散,而且可以独立改变他们之间的交互。 在中介者模式中,通过创造出一个中介者对象,将系统中有关的对象所引用的其他对象数目减少到最少, 使得一个对象与其同事之间的相互作用被这个对象与中介者对象之间的相互作用所取代。因此,中介者 模式就是迪米特法则的一个典型应用。 Creat原创 2012-11-19 09:37:58 · 925 阅读 · 0 评论 -
C++实现迭代器模式
说实话这个迭代器模式实现起来有点模糊/* 迭代器模式:提供一种方法顺序访问一个聚合对象中个各个元素,而不暴露该对像的内部表示. 模式的动机: (1)一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问 它的元素,而又不需要暴露它的内部结构。 (2)针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的原创 2012-11-19 10:09:59 · 4105 阅读 · 0 评论 -
C++实现职责链模式
/* 职责链模式:避免请求发送者和接受者耦合在一起,让多个对象都有机会处理请求,将这些对象连接处一条链,并且 沿着这条链传递请求,直到有对象处理它为止。 在以下情况下可以使用职责链模式: (1)有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 (2)在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 (3)可动态指定一组对象处理请求。 应用举例原创 2012-11-18 08:52:51 · 1509 阅读 · 0 评论 -
C++实现建造者模式
/* 建造者模式:将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示*/#include using namespace std;class Builder{public: virtual void BulidPartOne() {} virtual void BuildPartTwo() {}};class ConcreteBuilder原创 2012-11-06 19:49:57 · 727 阅读 · 0 评论 -
C++实现模版设计模式
/* 模版设计模式:定义一个操作中的算法框架,具体的算法细节在子类中实现。 模版方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定的步骤 Created by Phoenix_FuliMa*/#include using namespace std;class TemplateMethod{public: virtual void step_1() {} vir原创 2012-11-04 09:20:50 · 701 阅读 · 0 评论 -
观察者模式及c++实现
观察者模式概念:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。“Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automat原创 2012-02-07 16:05:29 · 13100 阅读 · 6 评论 -
装饰者模式及C++实现
装饰者模式:动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。 UML图设计原则: 1. 多用组合,少用继承。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。2. 类应设计的对扩展开放,对修改关闭。要点: 1. 装饰者和被装饰对象有原创 2012-02-07 16:41:43 · 4137 阅读 · 4 评论 -
策略模式及C++实现
策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets th原创 2012-02-07 15:41:27 · 7065 阅读 · 1 评论 -
职责链设计模式解决if else多分支问题
具体方案具体分析,此代码适合分类业务进行的if else操作,解决多分支问题//方案一:职责链设计模式#include #include #include #include using namespace std;typedef string KV;class ProcessCmdFromWeb{protected: ProcessCmdFromWeb *suc原创 2012-10-29 19:04:11 · 4330 阅读 · 0 评论 -
策略模式-应用代码示例
设计思想非常好,充分体现了策略模式的特点以下代码修改后转载#include #include using namespace std;class ReplaceAlgorithm{public: virtual void Replace() = 0;};class LRU_ReplaceAlgorithm:public ReplaceAlgorithm{publi原创 2012-10-21 10:30:18 · 635 阅读 · 0 评论 -
设计模式的六大原则
1. 开闭原则(Open-Closed Principle: OCP) 对软件实体可以扩展,但是不可以修改。在一个系统中,对扩展是开放的,但是对修改是关闭的,一个好的系统可以再不修改源码的情况下扩展功能,满足对软件的新的需求。2. 里式替换原则(Liskov Substitution Principle: LSP) 子类必须能够替换它们的父类 举例:不符合的情原创 2012-10-20 23:21:00 · 991 阅读 · 0 评论 -
设计模式C++实现(1)——工厂模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍工厂模式的实现。 工厂模式属于创转载 2012-10-20 22:39:07 · 854 阅读 · 0 评论 -
C++实现装饰者模式
/* 装饰者模式:动态的给一些对象增加一些额外的功能,就增加功能来说,装饰着模式比生成子类更加灵活*/#include using namespace std;class Component{public: virtual void diplay() = 0;};class ConcreteComponent: public Component{public: vi原创 2012-10-31 20:10:31 · 625 阅读 · 0 评论 -
C++实现代理模式
/* 代理模式:为其他对象提供一种代理,以控制对这个对象的访问 Created by Phoenix_FuliMa*/#include #include using namespace std;class Receiver{private: string name;public: Receiver(string name):name(name) { } str原创 2012-10-31 23:19:53 · 845 阅读 · 0 评论 -
C++实现工厂模式
/* 工厂模式:定义一个创建对象的接口,让子类决定具体实现哪个类,让类的实例化延迟到子类中。 Created by Phoenix_FuliMa*/#include using namespace std;class Product{public: virtual void display() = 0;};class Product1:public Product{原创 2012-11-01 08:36:08 · 754 阅读 · 0 评论 -
C++实现简单工厂模式
/* 简单工厂模式:跟工厂模式很类似,不过在函数里面加上了逻辑判断 Created by Phoenix_FuliMa*/#include using namespace std;class Product{public: virtual void display() = 0;};class Product1:public Product{public: void原创 2012-11-01 08:43:41 · 1256 阅读 · 0 评论 -
C++实现策略模式
/* 策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独 立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各 自实现上存在差异。用策略模式来封装算法,效果比较好。 Created by Phoenix_FuliMa*/#include using namespace std;class Str原创 2012-11-02 08:52:01 · 688 阅读 · 0 评论 -
原型模式代码示例
注意事项(1)根据原型模式的UML图可以知道,实现要依赖于抽象要不要依赖与具体(2)拷贝构造函数是核心,而且针对c++要进行的是深拷贝(3)克隆函数的关键就是调用拷贝构造函数#include using namespace std;class Student{protected: int id; char name[10];public: Student原创 2012-10-25 09:07:14 · 785 阅读 · 0 评论 -
C++实现原型模式
/* 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Created by Phoenix_FuliMa*/#include #include using namespace std;class Prototype{public: virtual Prototype *Clone() = 0; virtual void display() =原创 2012-11-02 23:18:10 · 1922 阅读 · 1 评论 -
C++实现享元模式
/* 享元模式:运用共享技术,有效的实现支持大量细粒度对象的复用 Created by Phoenix_FuliMa*/#include #include #include using namespace std;static int objnum = 0;class FlyWeight{public: virtual void Operate(string oute原创 2012-11-20 18:45:57 · 1204 阅读 · 0 评论