设计模式
风起时~微凉
面朝大海,静等春暖花开……
展开
-
设计模式(C++版本)
面向对象设计原则详见:https://blog.csdn.net/qqzhaojianbiao/article/details/115468332单例模式详见:https://blog.csdn.net/qqzhaojianbiao/article/details/116119794简单工厂模式详见:https://blog.csdn.net/qqzhaojianbiao/article/details/116131902工厂方法模式详见:https://blog.csdn.net/qqzha原创 2021-06-18 14:48:36 · 216 阅读 · 0 评论 -
面向对象设计原则
1、依赖导致原则(DIP)2、开放封闭原则(OCP)3、单一职责原则(SRP)4、Liskov(里式)替换原则(LSP)5、接口隔离原则(ISP)6、优先使用对象组合,而不是类继承7、迪米特原则(最少知道原则)原创 2021-04-06 19:20:14 · 117 阅读 · 0 评论 -
组合模式
定义: 将对象组合成树形结构以表示“部分-整体”的层次结构UML图:class Component{public: std::string m_strName; Component(string strName) { m_strName = strName; } virtual void Add(Component* com) = 0; virtual void Display(int nDepth) = 0;};class Le原创 2021-04-28 15:50:30 · 122 阅读 · 0 评论 -
解释器模式
定义: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子UML图:class AbstractExpression{public: virtual void Interpret(Context* context)=0;};class Expression : public AbstractExpression{public: virtual void Interpret(Context* context) {原创 2021-04-28 15:36:05 · 104 阅读 · 0 评论 -
访问者模式
定义: 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。UML图;class Visitor{public: Visitor(){} virtual ~Visitor(){} virtual void VisitConcreteElementA(Element* elm) = 0; virtual void VisitConcreteElementB(Element* elm) = 0;};class C原创 2021-04-28 15:13:46 · 114 阅读 · 0 评论 -
迭代器模式
定义: 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示UML图:template<typename T>class Iterator{public: virtual void first() = 0; virtual void next() = 0; virtual bool isDone() const = 0; virtual T& getCurItem() = 0;};template<typena原创 2021-04-28 14:55:31 · 121 阅读 · 0 评论 -
备忘录模式
定义: 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态UML图:代码实现:class Memento{public: Memento(const std::string &strState):m_strState(strState){} std::string getState() const {return m_strState; } void setState(const std::stri原创 2021-04-28 10:37:27 · 105 阅读 · 0 评论 -
职责链模式
定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止UML图:代码实现:class IHandler{public: IHandler() { m_pSuccessor = nullptr; } virtual ~IHandler() {} void SetSuccessor(IHandler *successor) { m_pSuccessor = successor; }原创 2021-04-28 10:20:10 · 125 阅读 · 0 评论 -
享元模式
定义: 运用共享技术有效地支持大量细粒度的对象UML图:代码实现:class MyObject{public: MyObject(conststd::string& strName) : m_strName(strName) {} ~MyObject() {}private: std::string m_strName;};classMyObjectFactory{private: std::unordered_map<std::st原创 2021-04-28 10:01:14 · 108 阅读 · 0 评论 -
命令模式
定义: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作UML图:代码实现:class Command{public: virtual void Execute() = 0;};class ConcreteCommand : public Command{public: ConcreteCommand() {} void Execute() { std::cout原创 2021-04-27 17:57:44 · 109 阅读 · 0 评论 -
状态模式
定义: 允许一个对象在其内部状态改变时改变它的行为UML图:代码实现:class State{public: virtual void Handle(Context *pContext) = 0;};class ConcreteStateA : public State{public: virtual void Handle(Context *pContext) { std::cout << "test ConcreteSta原创 2021-04-27 17:42:09 · 115 阅读 · 0 评论 -
中介者模式
定义: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互UML图:代码实现:class Colleague{public: Colleague(Mediator *pMediator) : m_pMediator(pMediator){} virtual void Send(std::string strMsg) = 0;protected: Mediator *m_pMediat原创 2021-04-27 17:17:24 · 107 阅读 · 0 评论 -
适配器模式
定义: 将一个类的接口转换成客户希望的另外一个接口UML图:代码实现:class Target{public: Target(){} virtual ~Target(){} virtual void Request() { cout<<"Target::Request"<<endl; }};class Adaptee{public: void SpecificRequest() {原创 2021-04-27 16:02:06 · 103 阅读 · 0 评论 -
代理模式
定义: 其他对象提供一种代理以控制对这个对象的访问UML图:代码实现:class Interface{public: virtual void Request()=0;};//真实类class RealClass : public Interface{public: virtual void Request() { cout<<"真实的请求"<<endl; }};//代理类class ProxyClass : public Interface原创 2021-04-27 10:53:59 · 111 阅读 · 0 评论 -
外观(门面)模式
定义: 对外稳定松耦合,对内迭代变化高内聚,子系统的内部外部要做好解耦,为子系统的一组接口提供一个稳定一致的(界面),子系统中的任何变化都不会影响这个(界面)的变化UML图:代码实现:// 处理第一部分class DealOne{public: void DealOneTest() { cout<<"DealOneTest part"<<endl; }};// 处理第二部分class DealTow{pub原创 2021-04-27 09:53:10 · 119 阅读 · 0 评论 -
建造者模式
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示UML图:代码实现:```cpp```cpp// Productclass Product{public: void show() { std::cout<<*item<<endl; } void setPart1(std::string &strPart1){m_strPart1 = strPart1;} void se原创 2021-04-26 14:35:30 · 119 阅读 · 0 评论 -
原型模式
定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象UML图:代码实现://接口class Prototype{public : Prototype(){} virtual ~Prototype(){} virtual Prototype * Clone() = 0;};//实现class ConcretePrototype : public Prototype{public : ConcretePrototype():m_cou原创 2021-04-26 11:47:57 · 127 阅读 · 0 评论 -
装饰器模式
定义: 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。、UML图:代码实现:class Game { public: Game() {} virtual ~Game() {} virtual void play() { std::cout << "game play" << std::endl; }};class CarGame : public Game { p原创 2021-04-25 17:38:00 · 105 阅读 · 0 评论 -
抽象工厂模式
定义:针对多个工厂方法进行再次抽取UML图:代码实现:class ProductA{public: virtual void Test() = 0;};class ProductA1 : public ProductA{public: void Test() { cout<<"ProductA1 Test"<<endl; }};class ProductA2 : public ProductA{publ原创 2021-04-25 17:06:59 · 114 阅读 · 0 评论 -
工厂方法模式
定义:抽象出工厂类,具体创建的对象在具体工厂类实现UML图:代码实现:class Product{public: virtual void Test() = 0;};class ProductA : public Product{public: void Test() { cout<< "ProductA Test"<<endl; }};class ProductB : public Product{pu原创 2021-04-25 16:38:05 · 114 阅读 · 0 评论 -
简单工厂模式
定义:通过一个工厂创建不同对象UML图:代码实现:enum ProductType{ TypeA, TypeB, TypeC};class Product{public: virtual void Test() = 0;};class ProductA : public Product{public: void Test() { std::cout << "ProductA Test" <<原创 2021-04-25 16:20:30 · 119 阅读 · 0 评论 -
单例模式
定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。UML结构图单例看似简单,但是涉及多种实现方式。分类:懒汉实现:顾名思义,无论是否使用,先创建了再说饿汉方式:使用时创建如何实现线程安全的单例模式呢?由于C++11及以后的版本中,静态变量初始化是线程安全。上代码:class Singleton{public: static Singleton& getInstance(){ static Singleton m_instance; //局部静态变量 retur原创 2021-04-25 11:07:16 · 147 阅读 · 0 评论 -
桥接模式
定义:是将抽象部分与它的实现部分分离,使它们都可以独立地变化。UML结构图:Abstraction类定义了抽象类的接口,并且维护一个指向Implementor实现类的指针;RefineAbstraction类扩充了Abstraction类的接口;Implementor类定义了实现类的接口,这个接口不一定要与Abstraction的接口完全一致;实际上,这两个接口可以完全不同;ConcreteImplementor类实现了Implementor定义的接口。举例:比如图形有圆形、线段、长方形,画原创 2021-04-25 10:50:47 · 136 阅读 · 0 评论 -
策略模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。UML类图Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法;ConcreteStrategy:实现Strategy接口的具体算法;Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的引用,同时,可以定原创 2021-04-25 09:02:28 · 138 阅读 · 0 评论 -
模板方法模式
定义:定义一个操作算法的框架,实现步骤延迟到子类中去实现代码实现:class Game { public: Game() {} virtual ~Game() {} void Run() { StartGame(); StopGame(); } private: virtual void StartGame() = 0; virtual void StopGame() = 0;};class Baske原创 2021-04-23 17:22:00 · 124 阅读 · 0 评论 -
观察者模式
定义对象间的一对多关系,当一个对象状态发生改变的时候,其它依赖于它的对象都会得到广播通知并进行自定义动作,通过面向对象技术的多态技术,可以降低这种依赖关系,降低耦合度。包含订阅者、观察者两种角色class ObserverBase { public: ObserverBase() {} virtual ~ObserverBase() {}virtual void Update(){}};class ObserverOneChild:public ObserverBase {void Update()原创 2021-04-21 14:18:07 · 138 阅读 · 0 评论