面向对象语言中的设计模式——策略模式


策略模式

策略模式(Strategy Pattern):在有多种算法相似的情况下,使用多个 if-else 语句会使代码变得复杂和难以维护,而策略模式允许策略随着对象改变而改变。
核心思想:让算法和对象分开来,使得算法可以独立于使用它的客户而变化
策略模式的重心不是如何实现算法,而是封装、如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。


策略模式:

  • 环境(Context)角色:持有一个Strategy的引用。
  • 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(ConcreteStrategy.角色:包装了相关的算法或行为。

缺点:算法由客户端选择,编写代码时需要了解全部的算法,并自行决定使用哪一个策略类。
所有策略类都需要对外暴露。