设计模式
^Moon^
这个作者很懒,什么都没留下…
展开
-
设计模式(一):里氏代换原则
Liskov Substitution Principle(LSP): If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behvior of P unchanged when o1 is substitu原创 2013-06-20 20:29:56 · 628 阅读 · 1 评论 -
设计模式-模板方法模式
适用情境:基类定义逻辑框架,子类实现具体步骤.// ctemplatemethod.h#ifndef CTEMPLATEMETHOD_H#define CTEMPLATEMETHOD_Hclass CTemplateMethod{public: CTemplateMethod(); virtual void TemplateProcess(); virtual voi原创 2016-10-24 19:41:31 · 196 阅读 · 1 评论 -
设计模式-建造者模式
适用情境:创建复杂对象,使用单独类指导对象的创建.// product.h#ifndef PRODUCT_H#define PRODUCT_Hclass Product{public: Product(); virtual void Show();public: int m_iNumA; int m_iNumB;};#endif // PRODUCT_H/原创 2016-10-25 21:44:42 · 368 阅读 · 1 评论 -
设计模式-观察者模式
适用模式:多个观察者同时监听一个主题对象.// subject.h#ifndef SUBJECT_H#define SUBJECT_H#include #include "observer.h"class Observer;class Subject{public: Subject(); virtual void Attach(Observer * obse原创 2016-10-26 12:03:13 · 252 阅读 · 1 评论 -
设计模式-抽象工厂模式
适用情境:定义一个类,此类创建一系列相关接口.// product.h#ifndef PRODUCT_H#define PRODUCT_Hclass Product{public: Product(); virtual void Show() = 0;public: int m_id;};#endif // PRODUCT_H// product.cpp#inc原创 2016-10-26 15:52:38 · 198 阅读 · 1 评论 -
设计模式-单例模式
使用情境:确保一个类仅有一个对象实例.// singleton.h#ifndef SINGLETON_H#define SINGLETON_Hclass Singleton{private: Singleton(); static Singleton* single_instance;public: static Singleton* GetInstance();原创 2016-11-08 15:12:30 · 228 阅读 · 1 评论 -
设计模式-状态模式
适用情境:一个对象的运行时行为根据自身的状态不同而改变.// state.h#ifndef STATE_H#define STATE_Hclass Device;class State{public: State(); virtual void ShowState(Device * dev) = 0;};#endif // STATE_H// state.cpp#incl原创 2016-10-27 18:49:01 · 186 阅读 · 1 评论 -
设计模式-桥接模式
适用情境:当继承不能完全分离抽象部分和实现部分时,选择桥接模式来符合”开放-封闭原则”.// classa.h#ifndef CLASSA_H#define CLASSA_H#include "classb.h"class ClassA{public: ClassA(); virtual void Run() = 0; void SetClassB(ClassB* c原创 2016-11-09 11:03:06 · 245 阅读 · 1 评论 -
设计模式-命令模式
使用情境:把操作的请求者与请求的执行者分离开.添加新命令类型,不影响已有的命令.// receiver.h#ifndef RECEIVER_H#define RECEIVER_Hclass Receiver{public: Receiver(); virtual void ExecuteCommandA(); virtual void ExecuteCommandB(原创 2016-11-09 14:30:13 · 218 阅读 · 1 评论 -
设计模式-职责链模式
适用情境:根据请求的不同,交由不同的对象处理,请求沿着一条链传递,知道有一个对象处理为止.// request.h#ifndef REQUEST_H#define REQUEST_H#include class Request{public: Request(std::string content, int number);public: std::stri原创 2016-11-09 17:32:39 · 183 阅读 · 1 评论 -
设计模式-中介者模式
使用情境:封装一系列对象的交互方式,使得各对象之间不用显示互相调用,降低耦合.// person.h#ifndef PERSON_H#define PERSON_H#include "mediator.h"class Person{public: Person(Mediator* tmp); virtual void Send(std::string msg) = 0;原创 2016-11-09 21:31:19 · 234 阅读 · 1 评论 -
设计模式-享元模式
适用情境:需要大量共享对象,以节省内存开销.// flyweight.h#ifndef FLYWEIGHT_H#define FLYWEIGHT_Hclass Flyweight{public: virtual void Show() = 0;};#endif // FLYWEIGHT_H// sharedflyweight.h#ifndef SHAREDFLYWEIGHT_H原创 2016-11-09 22:34:51 · 167 阅读 · 1 评论 -
设计模式-解释器模式
适用情境 : 一些指令需要类似语言翻译方式来执行的方式的应用场景.// context.h#ifndef CONTEXT_H#define CONTEXT_H#include class Context{public: Context(std::string input);public: std::string m_input; std::strin原创 2016-11-10 12:04:27 · 227 阅读 · 1 评论 -
设计模式-原型模式
适用情境:一个对象复制自身.// prototype.h#ifndef PROTOTYPE_H#define PROTOTYPE_Hclass Prototype{public: Prototype(); Prototype(int id); virtual void Show(); virtual Prototype *Clone() = 0;privat原创 2016-10-24 13:55:03 · 209 阅读 · 1 评论 -
设计模式-组合模式
适用情境:把操作简单对象和复杂对象的接口统一,使得客户端使用组合对象和简单对象的方式一致.// component.h#ifndef COMPONENT_H#define COMPONENT_H#include class Component{public: Component(std::string strName); virtual void Add(Co原创 2016-11-03 23:38:54 · 205 阅读 · 1 评论 -
设计模式(一):依赖倒置原则
Dependence Inversion Principle(DIP): High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depe原创 2013-06-21 21:58:23 · 480 阅读 · 1 评论 -
设计模式(一):迪米特法则(最少知识原则)
迪米特法则:一个对象应该对其他对象有最少的联系。迪米特法则的强调的是一个类应该对与它有关的类的细节知道的越少越好。迪米特法则的要求:1.一个类只和与它“直接”相关的类有耦合关系。直接相关的类(朋友类)是指:出现在成员变量、方法的输入输出参数中的类,而出现在方法体内的类则不是。类与类之间的关系是建立在类之间的,而不是方法,因此一个方法尽量不要引入一个类中不存在的对象。原创 2013-06-23 21:24:36 · 679 阅读 · 1 评论 -
设计模式(一):接口隔离原则
实例接口:一个类就是一个实例接口。此类的所有实例都符合这个类定义的接口。类接口:就是高级语言中的interface或纯虚类。接口隔离原则:Clients should not be forced to depend upon interfaces that they don't use.(客户端不应该依赖它不需要的接口)。The dependency of one class to原创 2013-06-22 20:59:06 · 666 阅读 · 1 评论 -
设计模式-策略模式
定义一系列算法类,当算法变化时,不影响客户端. 适用场景:类中的成员以方法为主,算法经常变动. 好处:每种算法都有自己的类,可以通过自己的接口单独测试,简化了单元测试. 缺点:客户端需要判断适用何种算法.// coperation.h#ifndef COPERATION_H#define COPERATION_Hclass COperation{public: COperati原创 2016-10-22 14:16:58 · 164 阅读 · 1 评论 -
设计模式(一):单一职责原则
Single Responsibility Principle(SRP): There should never be more than one reason for a class to change.单一职责原则的定义:应该有且只有一个原因导致类的变更。按照字面意思理解,一个类应该只有一个功能才符合单一职责原则。单一职责原则的好处:1.因为只有一个职责,类的复原创 2013-06-19 21:23:47 · 780 阅读 · 1 评论 -
设计模式(一):开放封闭原则
开放封闭原则:一个软件实体(如类、模块和函数)应该对货站开放,对修改封闭。开放封闭原则指的是:既然需求一定会随着时间发生变化,软件只有适应变化。但是,较好的方式是通过扩展软件实体的方式应对变化,而不是通过修改原有代码来适应变化。开放封闭原则要求对修改关闭,但不做任何修改也是不可能的。变化大概可分为如下类别:1.逻辑变化:一个业务逻辑具体的处理算法变化,而且是原创 2013-06-24 21:14:09 · 793 阅读 · 1 评论 -
设计模式-适配器模式
适用情境:在源接口和目标接口都不适宜修改的情况下,把源接口转换成目标接口.// target.h#ifndef TARGET_H#define TARGET_Hclass Target{public: Target(); virtual void Request();};#endif // TARGET_H// target.cpp#include "target.h"原创 2016-11-02 21:56:54 · 243 阅读 · 1 评论 -
设计模式-备忘录模式
适用情境:在一个对象外部记录其状态,在对象状态改变后提供恢复以前状态的功能.// device.h#ifndef DEVICE_H#define DEVICE_H#include "memo.h"class Device{public: Device(); Memo* CreateMemo(); void Recover(Memo* memo); void S原创 2016-11-02 23:55:33 · 197 阅读 · 1 评论 -
设计模式-装饰模式
适用情境:给一个类添加一些额外的功能,而不修改原来类的代码.添加的功能一般不是非常重要的核心功能,而是较少使用的次要功能.添加的功能放在一个单独的类中,客户端可以对添加的功能进行选择.优点:新添加的功能不影响被装饰类的功能,不增加被装饰类的复杂度. 缺点:需要修改客户端代码.// component.h#ifndef COMPONENT_H#define COMPONENT_Hclass Co原创 2016-10-22 18:50:53 · 226 阅读 · 1 评论 -
设计模式-代理模式
适用情境:把真实请求处理类与客户端进行隔离// subject.h#ifndef SUBJECT_H#define SUBJECT_Hclass Subject{public: Subject(); virtual void Request() = 0;};#endif // SUBJECT_H// subject.cpp#include "subject.h"Subje原创 2016-10-23 09:58:57 · 166 阅读 · 1 评论 -
设计模式-工厂方法模式
适用情境:与简单工厂模式相比,由客户端做判断.// product.h#ifndef PRODUCT_H#define PRODUCT_Hclass Product{public: Product(); virtual void Show() = 0;};#endif // PRODUCT_H// product.cpp#include "product.h"Produc原创 2016-10-23 11:31:56 · 217 阅读 · 1 评论 -
设计模式-简单工厂模式
适用情景: 根据输入条件的不同,创建不同的类的对象. 缺陷:客户端需要了解基类和工厂类. C++实现:// coperation.h#ifndef COPERATION_H#define COPERATION_Hclass COperation{public: COperation();public: int m_nFirst; int m_nSecond;原创 2016-10-20 15:44:19 · 190 阅读 · 1 评论 -
设计模式-访问者模式
适用情境 : 把对象和对象上的次要操作分离开,以符合单一职责原则.// visitor.h#ifndef VISITOR_H#define VISITOR_Hclass Server;class Visitor{public: virtual void VisitServerA(Server* serverA) = 0; virtual void VisitServerB(S原创 2016-11-11 11:05:57 · 248 阅读 · 1 评论