
设计模式-C++版本
文章平均质量分 77
wkd_007
知道得越多,知道的越少
展开
-
大话设计模式C++版本-09-建造者模式
概述 建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 建造者模式其实就是在创建复杂对象时,使用一个Builder类(建造者类)来规范了必要的步骤,并且使用一个Director类(指挥类)来规范建造过程。 应用场景 一些基本部件不会变,而其组合经常变化的时候。例如:画一个小人,小人的基本部件(头、身体、两只手、两只脚)以及画的过程一般都不会变的;而画瘦子或胖子就就需要改变画的方法了。 一般步骤 写一个Builder类来规范必要的步骤,每个步骤都是纯虚函数,所以子类必须重写原创 2020-07-09 21:03:31 · 264 阅读 · 0 评论 -
大话设计模式C++版本-08-外观模式
概述 外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。 应用场景 降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口 一般步骤 1.写多个子类且每个子类都有自己的方法; class SubSystemOne { public: void MethonOne() { cout <原创 2020-07-06 22:31:35 · 192 阅读 · 0 评论 -
大话设计模式C++版本-07-模板方法模式
概述 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 优点: 封装不变部分,扩展可变部分 提取公共代码,便于维护 行为由父类控制,子类实现 缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。 使用场景 一个类有大部分的功能是一直不需要改变的 但有少部分的功能需要依据不同情况改变 例子:小学时,学生对着黑板抄习题时,每个人抄的题目是不变的,但每个人的答案是不同的,按照模板方法模式原创 2020-07-06 21:57:34 · 215 阅读 · 0 评论 -
大话设计模式C++版本-06-原型模式
概念 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原理:利用一个Clone函数来封装了自身的拷贝构造函数,调用Clone函数时就会触发拷贝构造。 使用场景 利用已有的一个原型对象,快速地生成和原型对象一样的实例 一般步骤 设计一个接口类,这步感觉可有可无;class ICloneable { public: virtual ICloneable *Clone()=0; }; 写一个类用来继承前面的接口类,并实现克隆方法,如果需要深拷贝的话,需要自己实现拷贝构造函数;原创 2020-07-05 23:24:08 · 310 阅读 · 0 评论 -
大话设计模式C++版本-05-工厂方法模式
概念 工厂方法模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 与简单工厂模式对比 简单工厂模式最大优点就是工厂类中包含了必要的逻辑判断,可以根据不同条件动态实例化相关的类, 但如果要增加新的需求就需要改动这个工厂类,违背了开放-封闭原则。 工厂方法模式克服了这个缺点,在增加功能时,不需要改动原有的工厂类,但缺点是每增加新功能就需要增加新的类,增加了开发量。 使用场景 有几个不同的类,且这几个类有共同的父类; 在不同的条件下用这几个类创造不同的对象;原创 2020-07-05 16:20:22 · 207 阅读 · 0 评论 -
大话设计模式C++版本-04-代理模式
概念 代理模式:为其他对象提供一种代理以控制对这个对象的访问 使用场景 想在访问一个类时做一些控制; 直接访问对象时会带来的问题,比如说:要访问的对象在远程的机器上。 一般步骤 将被代理者和代理者的共同行为抽象出来作为一个类;class GiveGift // 送礼物类 { public: virtual void GiveDolls() = 0; virtual void GiveFlowers() = 0; virtual void GiveChocolate() = 0; }; 写被代原创 2020-07-04 22:02:26 · 145 阅读 · 0 评论 -
大话设计模式C++版本-03-装饰模式
概念 装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。 允许向一个现有的对象添加新的功能,同时又不改变其结构 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。 缺点:多层装饰比较复杂。 应用场景 在不想增加很多子类的情况下扩展类。 动态增加功能,动态撤销。 一般步骤 定义一个基类,并带有一个功能的函数。如:Person类里有个Show()功能;class Person { public:原创 2020-07-04 21:49:44 · 219 阅读 · 0 评论 -
大话设计模式C++版本-02-策略模式
概念 策略模式:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到用算法的客户。 注意:与简单工厂模式相比,使用上只需要知道 Context 类即可, 应用场景 算法会时常变动; 用几个类封装了这些算法且有共同的父类; 一般步骤 抽象一个算法类class Strategy { public: virtual void Algorithm()=0; }; 写具体的子类class ConcreateStrategyA : public Strategy { publi原创 2020-07-03 21:34:02 · 207 阅读 · 0 评论 -
大话设计模式C++版本-01-简单工厂模式
概念 简单工厂模式:根据不同的条件,使用一个工厂类来创建不同类的对象的一种设计模式,用来解决创建对象的问题。 应用场景 有几个不同的类,且这几个类有共同的父类; 在不同的条件下用这几个类创造不同的对象; 一般步骤 写一个抽象类作为不同条件的几个类的父类,例如写一个“操作符类”作为“加法类”和“减法类”的父类;// 伪代码 class Operator { ... virtual double GetResult() = 0; } 写具体的子类,并且继承前面的抽象类// 伪代码 class Op原创 2020-07-03 20:58:23 · 370 阅读 · 0 评论