设计模式
rens111
这个作者很懒,什么都没留下…
展开
-
设计模式-模板模式
1. 模板模式 对于流程一致的一个事物,但是某些步骤的细节不一样。在基类中构造出该事物的所有流程,细节的不同在子类中实现; 模板方法模式: 定义一个操作中算法的骨架,但是将一些步骤延迟到子类中。模板方法使得可以不改变一个算法的机构就可以重新定义该算法的某些特定步骤; class Template { public: void question1() { cout << "question1:ABC?" << endl; } void question2() { cou原创 2021-02-08 21:02:35 · 170 阅读 · 0 评论 -
设计模式-原型模式
1. 原型模式 如果你想从A的实例中得到一份与A内容相同的实例,并且这两个实例互不干扰,并且实例A是运行时的状态,就需要使用原型模式; 原型模式与拷贝构造函数是不相同的。拷贝构造函数涉及的类是已知的, 原型模式通过指针调用clone()函数, 其涉及的类型是未知的; 原型模式与直接new 出实例是不同的。用new新建对象不能获取对象当前运行时的状态。并且某些情况下,直接new新对象效率低; 如果是需要一个干净的空对象时候,建议选用工厂模式或是抽象工厂模式; 代码如下,让一个类继承带有clone()的接口函原创 2021-02-08 20:26:08 · 151 阅读 · 0 评论 -
设计模式-装饰者模式
1. 装饰者模式 装饰者模式是为已有的实体动态地添加更多功能的一种设计模式。装饰者模式将每一个单独的功能都封装在单独的派生类当中,并且让这个类包装所需要装饰的对象; 装饰者模式可以区分核心职责与装饰功能,简化原有的类; 1)装饰类中存储着一个指针,指向要装饰的对象; 2)装饰类同时又继承自要装饰的对象;这样在加糖的派生类看来,加了冰的茶依旧是茶; class Tea { public: Tea(const string& str) :name(str) {} Tea(const Tea&原创 2021-02-08 16:37:12 · 137 阅读 · 0 评论 -
设计模式-简单工厂模式与策略模式
1. 简单工 厂模式与策略模式 简单工厂模式 就是将生产函数变成static函数并放置在类中,这个生产函数接收外部来的信息,根据信息加工生产得到具体的派生类,并将这个派生类的指针作为函数返回; 简单工厂模式结合策略模式 不需要生产函数和生产类,而是设计一个context类,在这个类中封装整个产品的继承体系结构,所有对整个产品继承体系结构的操作都通过context类实现; class CashSuper { public: virtual double getResult(double money)原创 2021-02-08 13:45:28 · 86 阅读 · 0 评论 -
设计模式-享元模式
1. 享元模式 比如围棋,10个棋子就需要实例化10个对象。这样导致内存空间浪费。 享元模式对于相同性质的棋子,会共享一个相同的对象,因此,围棋不管多少个棋子,只需要实例化黑白两个对象即可; class Website { public: virtual void use() {} }; class ConcreteWebsite :public Website { private: string name; public: ConcreteWebsite(const string& str原创 2021-02-07 17:17:48 · 69 阅读 · 0 评论 -
设计模式-解释器模式
1. 解释器模式 一个表达式中有多个语法,每一个语法就是一个派生类,有一个特定的解释; 解释器模式是讲一个表达式根据语法分为多个派生类,并且对每一个派生类执行解释。 下面的代码是使用解释器模式求解"a+b-c", 思路是求得的值放在栈顶; class Expression { public: virtual int interpreter(map<string, int>& var) = 0; virtual ~Expression() {} }; class VarExpre原创 2021-02-07 15:12:27 · 84 阅读 · 0 评论 -
设计模式-访问者模式
1. 访问者模式 将人分为男人和女人两种;将人的状态分为成功、失败、高兴等多种状态; 代码如下: class Person { public: virtual void show(const Visitor& visitor)const {} }; class Man :public Person { public: virtual void show(const Visitor& visitor) const { cout << "This is man" <&原创 2021-02-07 13:14:26 · 72 阅读 · 0 评论