策略模式(组件协作)

策略模式(组件协作)

链接:策略模式实例代码 + 注解

目的

正常情况下,一个类/对象中会包含其所有可能会使用的内外方法,但是一般情况下,这些常使用的类都是由不同的父类继承、组合得来的,来实现代码的复用,这当然也包括了重复的方法

  • **冗余:**但是如果这些算法、方法放置的位置不好可能会导致不常使用甚至不使用的算法编码到了对象中。
  • 扩展:若是在未来再对该模块扩展、修改时将会直接去触碰类成员,这一点违背了我们的开闭原则

如何正确的将这些父子、兄弟间的不同、相似、相同算法放在好的位置并去独立以达到解耦、去冗余的作用就是策略模式所注意的。

模式定义

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。 ------《设计模式》 GoF

要点总结

  • Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。
  • Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。
  • 如果Strategy对象没有实例变量,那么各个上下文可以共享同一个Strategy对象,从而节省对象开销

Eg.

相关推荐
2601_961593421 分钟前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
researcher-Jiang11 分钟前
Design Patterns——Template Method入门到情景实战
python·设计模式·模板方法模式
HZZD_HZZD34 分钟前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
在水一缸1 小时前
拒绝被打扰:深度解析 macOS 进程守护与“反自动启动”攻防战
macos·策略模式·用户体验·进程守护·自动启动·系统权限
多加点辣也没关系3 小时前
JavaScript|第4章:类型转换
开发语言·javascript
聪慧的水蜜桃3 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·c#
yqcoder3 小时前
httpOnly 是什么,又有什么用?
开发语言·前端·javascript
山登绝顶我为峰 3(^v^)33 小时前
C/C++ 交叉编译方法
java·c语言·c++
wuqingshun3141594 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
飞猪~4 小时前
LangChain python 版本 第一集
开发语言·python·langchain