
设计模式
花开_花落
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员
展开
-
设计模式之原型模式(Prototype)
原型模式:优点:使用拷贝比new一个对象的开销要小代码示例:Prototype.h#ifndef PROTOTYPE_H#define PROTOTYPE_H/** *1、声明一个抽象基类,并定义clone()函数为纯虚函数。 *2、实例化各个子类,并且实现复制构造函数,并实现clone()函数 */class Resume{public:原创 2016-05-06 12:32:47 · 735 阅读 · 0 评论 -
设计模式之状态模式(State)
作用:一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为;#include <iostream>using namespace std;class War;class State{public: virtual void start(War *){} virtual void continued(War *){} virtual void end(原创 2017-11-28 18:06:56 · 176 阅读 · 0 评论 -
设计模式之访问者模式(Visitor)
优点:易于添加那些目前尚未考虑到的方法(扩展功能) 缺点: 1)访问者角色不适合具体元素角色经常发生变化的情况。 2)访问者角色要执行与元素角色相关的操作,就必须让元素角色将自己内部属性暴露出来,这就破坏了元素角色的封装性。访问者和被访问的对象的耦合性很大。 3)元素与访问者之间能够传递的信息有限,这往往也会限制访问者模式的使用。(因为访问者不原创 2017-11-30 10:42:31 · 171 阅读 · 0 评论 -
设计模式之观察者模式(Observer)
优点: 1、目标和观察者之间松耦合#include <iostream>#include <list>using namespace std;//观察者class Observer{public: virtual void update(int) = 0;};//目标class Subject{public: virtual void attach(Observe原创 2017-11-21 14:39:07 · 184 阅读 · 0 评论 -
设计模式之代理模式(Proxy)
1、远程代理 优点:逻辑与实现彻底解耦//接口class A{public: virtual ~A() = 0 {} virtual void request() = 0;};//业务执行者A1class A1 : public A{public: void request() { cout<<"A1 request"<<endl;原创 2017-11-16 15:13:34 · 187 阅读 · 0 评论 -
设计模式之命令行模式(Command)
优点: 1、容易设计出一个命令队列 2、可以设计出请求的撤销与重做 作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作#include <iostream>using namespace std;#include <vector>//用来声明执行操作的接口class Command{public: virt原创 2017-11-22 16:44:34 · 648 阅读 · 0 评论 -
设计模式之备忘录模式(Memento)
作用: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将改对象恢复到原先保存的状态。#include <iostream>#include <vector>using namespace std;//保存的信息class Memento{public: Memento(int vit, int att, int def) :_原创 2017-12-20 13:49:28 · 203 阅读 · 0 评论 -
设计模式之策略模式(Strategy)
策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好 “`include using namespace std;//抽象接口 class Algorithm { public: virtual void replace原创 2017-12-04 15:37:17 · 183 阅读 · 0 评论 -
设计模式之中介者模式(Mediator)
优点:允许我们公开一个统一的接口,系统的不同部分可以通过该接口进行通信,而不需要显示的相互作用; 适用场景:一个系统的各个组件之间看起来有太多的直接关系,这个时候则需要一个中心控制点,以便各个组件可以通过这个中心控制点进行通信;#include <iostream>#include <string>using namespace std;class Mediator;class Person原创 2017-12-07 17:31:57 · 165 阅读 · 0 评论 -
设计模式之迭代模式(Iterator)
优点:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示;template<class Item>class Iterator{public: virtual void first() = 0; virtual void next() = 0; virtual Item currentItem() = 0; virtual bool is原创 2017-12-29 14:11:44 · 319 阅读 · 0 评论 -
设计模式之外观模式(Facade)
优点:1)为复杂的子系统提供了简单接口 2)提高子系统的独立性 3)在层次结构中,可以使用Facade模式定义系统中每一层的接口#include <iostream>using namespace std;//子系统class A{public: void run(){cout<<"run A"<<endl;}};class B{pub原创 2017-06-30 15:00:46 · 208 阅读 · 0 评论 -
设计模式之享元模式(Flyweight)
优点:1)大幅度地降低内存中对象的数量#include <iostream>#include <vector>using namespace std;class FlyWeight{public: virtual ~FlyWeight(){} string getInstrinsicState(){return _state;} virtual void Operat原创 2017-06-30 14:39:56 · 183 阅读 · 0 评论 -
设计模式之建造者模式(Builder)
建造者模式:优点:1.隔离了构建的步骤和具体的实现,为产品的具体实现提供了灵活性2.封装和抽象了每个步骤的实现,实现了依赖倒置原则3.封装了具体的步骤,减少了代码冗余缺点:1.要求构建的产品不能剧烈变化代码示例:Builer.h#ifndef BULIDER_H#define BULIDER_Hclass Builder{public:原创 2016-05-06 12:24:20 · 474 阅读 · 0 评论 -
设计模式之单例模式(Singleton)
单例模式(Singleton)优点:1.提供了对唯一实例的访问方法2.内存中只存在一个对象,节约系统内存3.允许可变数目的实例缺点:1.由于没有抽象层,因此扩展有很大的困难2.单例类的职责过重,在一定程度上违背了“单一职责原则”代码示例:Singleton.h#ifndef SINGLETON_H#define SINGLETON_Hc原创 2016-05-06 12:11:18 · 349 阅读 · 0 评论 -
设计模式之抽象工厂模式(AbstructFactory)
抽象工厂模式(AbstructFactory)优点:1.可以支持不同类型的产品,使得产品的灵活性更强2.可以很方便的一族中间的不同类型的产品缺点:结构过于臃肿,如果产品类型过大,就会难以管理代码实现:AbstructFactory.h#ifndef ABSTRUCTFACTORY_H#define ABSTRUCTFACTORY_H/*ProductA原创 2016-05-06 11:58:19 · 623 阅读 · 0 评论 -
设计模式工厂方法(FactoryMethod)
工厂方法:优点:基本与简单工厂一致,但是遵循封闭-开放原则,灵活性更强缺点:与简单工厂差不多代码实现:FactoryMethod.h#ifndef FACTORYMETHOD_H#define FACTORYMETHOD_Hnamespace FactoryMethod {/*Product*/class AbstrcutBase{public:原创 2016-05-06 11:42:48 · 293 阅读 · 0 评论 -
设计模式之简单工厂(SimpleFactory)
基本的设计模式分类:创建型模式:负责对象的创建结构型模式:处理类与对象之间的组合,可以解决继承依赖性的问题行为型模式:类与对象交互中的职责分配,可以解决组件间如何交互,隔离变化简单工厂模式(SimpleFactory)优点:1.隐藏了对象创建的细节,将产品延迟到子类中实现2.方便添加新的子类产品,只需要修改工厂类传递的值即可3.遵循依赖倒转的原则缺点:原创 2016-05-06 11:34:52 · 409 阅读 · 0 评论 -
设计模式之桥接模式(Bridge)
优点:1)将可能变化的部分单独封装起来,使得变化产生的影响最小 2)抽象部分和实现部分单独变动,并且每一部分的扩充都不会破坏桥接模式搭起来 的架子 缺点:1)结构比较复杂 2)抽象类的修改影响到子类#include <iostream>using namespace std;//操作系统class OS{public: virtu原创 2017-06-29 14:36:16 · 193 阅读 · 0 评论 -
设计模式之适配器模式(Adapter)
优点:1)使用已存在的类,接口不符合要求 2)创建复用的类,该类可以与其它不相关的类协同工作#include <iostream>using namespace std;class Target{public: virtual void Interface() = 0;};class Adapter{public: void SpecificInter原创 2017-06-29 14:54:58 · 237 阅读 · 0 评论 -
设计模式之装饰模式(Decorator)
优点:1)动态地给对象添加一些额外的职责 2)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责#include <iostream>using namespace std;class Base{public: virtual void Operator() = 0;};class A : public Base{public: void原创 2017-06-29 16:12:49 · 229 阅读 · 0 评论 -
设计模式之组合模式(Composite)
优点:1)组合模式使基本对象组合成复杂对象,复杂对象继续组合,形成递归 2)组合模式可以让客户使用一致的组合对象和单个对象#include <iostream>#include <vector>using namespace std;//纯虚函数,只提供接口,没有默认的实现class Base{public: virtual void Operation(){原创 2017-06-29 17:51:21 · 219 阅读 · 0 评论 -
设计模式之模板模式(Template)
方法:定义操作中的骨架,而将一些步骤延迟到子类中实现;#include <iostream>using namespace std;class Base{public: virtual void method1() = 0; virtual void method2() = 0;};class A : public Base{public: void method1原创 2017-12-29 15:20:33 · 250 阅读 · 0 评论