当前位置: 代码迷 >> 综合 >> 「学习笔记」 11.3 | 设计模式(二) | Strategy(策略模式)
  详细解决方案

「学习笔记」 11.3 | 设计模式(二) | Strategy(策略模式)

热度:32   发布时间:2023-12-27 12:17:23.0

一、组件协作模式之策略模式

1.动机:软件构造的过程中某些对象使用的算法可能是多种多样的,会经常改变。如果将算法都编码到对象中,将会使对象变得异常复杂。有时支持不使用的算法也是一种负担(多余算法代码被装载到内存而不被使用,就是一种负担,不是stratrgy的顺带好处,这方面主要不是他解决)。

若不使用策略模式,会违反面向对象设计原则中的开闭原则:对拓展开放,对修改封闭。也就是使用拓展的方式去迎接需求,而不是使用修改源代码的方式。

2.模式定义:定义一些列算法把他们一个个封装起来,并且使他们可以相互替换(算法之间的替换以及对单个算法的替换)。该模式使得算法可独立于使用它的客户程序而变化。

3.要点总结

  • Strategy及其子类为组件提供了一系列可重用的算法。从而使类型在运行时方便地根据需要在各个算法之间进行切换。

  • strategy模式提供了用条件判断语句以外的另一种使用选择。消除判断语句,就是在解耦合。

拓展:代码中出现if else/switch case常常是需要使用Strategy的一种特征。if else/switch case是结构化时代分而治之的方式,列举的是现有已知的情况,无法应对变化(原则或者应对变化的方式就是在源代码中进行修改,违背开闭原则)。只有在if else/switch case是绝对不变的情况下(比如一周只有七天),可以不考虑strategy模式。

  • 如果strategy对象没有实例变量,那么各个上下文可以享受同一个strategy对象,从而节省对象开销。

二、散装问题、知识点

1.看问题考虑到时间变化,而不是静态的看问题

2.任何一个基类都需要添加一个虚类的析构函数,编译器虽然会自动生成,但是如果不写在多态的delete时会出问题。

指针就是多态的体现之一:能指向不同的函数实现不同的功能

引用也是多态度的体现之一

3.C++中规范写法是将一个文件存放一个类

4.虚函数是什么?

5.引用的缺点是什么?

6.C++中的继承是使用“:”

7.增量编译是什么?

8.面向对象的复用性是在二进制层面的复用,是编译层面的。也就是编译部署测试之后,不对源代码进行修改实现需求变更

9.除了单例模式,任何一个设计模式都可以找出变化以及稳定的部分

  相关解决方案