C++设计模式
设计模式
start_continue
这个作者很懒,什么都没留下…
展开
-
C++设计模式(5)代理模式
动机(Motivation)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不是去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。——《设计模式》Gof不使用代理cilient.cppclass ISubject{public: virtual原创 2021-03-25 10:53:07 · 88 阅读 · 0 评论 -
C++设计模式(4)工厂方法
动机(Motivation)在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合模式定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。——《设计模式》GoF不使用工厂方法FileSplitter1.cpp//具体的不同类型文本分割类cl原创 2021-03-25 10:20:26 · 93 阅读 · 0 评论 -
C++设计模式(3)单例模式
动机(Motivation)在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能保证它们的逻辑正确性以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任。模式定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。例子:为了保证只能存在一个实例,并且防止生成默认的构造函数和默认的拷贝构造函数,必须声明这两个函数并设为private,并要设置静态的成员函数和静态的指针变量class Singlet原创 2021-03-24 23:58:59 · 86 阅读 · 0 评论 -
C++设计模式(2)策略模式
模式定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。——《设计模式》GoF动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?例子:不同国家计税不使用策略模式strategy1.cp原创 2021-03-24 23:30:13 · 134 阅读 · 0 评论 -
C++设计模式(1)模板方法
模式定义定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。——《设计模式》GoF动机(Motivation)在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现原创 2021-03-24 23:07:11 · 185 阅读 · 0 评论 -
GOF-23 模式分类
GOF-23 模式分类## 从目的来看:• 创建型(Creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。 • 结构型(Structural)模式:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击。 • 行为型(Behavioral)模式:通过类继承或者对象组合来划分类与对象间的职责,从而应对需求变化为多个交互的对象带来的冲击。## 从范围来看:• 类模式处理类与子类的静态关系。• 对象原创 2021-03-24 22:25:47 · 131 阅读 · 0 评论 -
设计模式原则
理解隔离变化• 从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小各司其职• 从微观层面来看,面向对象的方式更强调各个类的“责任”• 由于需求变化导致的新增类型不应该影响原来类型的实现——是所谓各负其责对象是什么?• 从语言实现层面来看,对象封装了代码和数据。• 从规格层面讲,对象是一系列可被使用的公共接口。• 从概念层面讲,对象是某种拥有责任的抽象面向对象设计原则(1)依赖倒置原则(DIP) • 高层模块(稳定)不应该依赖于低层模块(变化),二者原创 2021-03-24 18:19:18 · 66 阅读 · 0 评论