Day47 【概念解析】策略模式
目录 ▼
整理定义
中文名称:策略模式
英文名称:strategy pattern
复述展开
What is strategy pattern?
💡 策略模式是一种行为设计模式,它使你能够在运行时改变对象的行为。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变的上下文对象。策略对象改变上下文对象的执行算法。 这种模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法独立于使用它的客户端。
🌰*1
从A地到机场,有飞机、火车、轮船等多种交通方式过去,这些就是不同的出游策略。这些交通方式可以互相替换,而且这些交通方式是独立于你从A地到机场的方式。
🌰*2
机器学习中,我们可能会有多种模型可以选择,如线性回归、决策树、神经网络等。每种模型都可以看作是一个策略,我们可以根据数据的特性和问题的需求来选择最合适的模型。
🌰*3
在图像处理软件中,可能会有多种滤镜可以选择,如黑白、复古、饱和度增强等。每种滤镜都可以看作是一个策略,用户可以根据需要选择不同的滤镜来处理图片。
策略模式结构

-
上下文 (Context) 维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。
-
策略 (Strategy) 接口是所有具体策略的通用接口, 它声明了一个上下文用于执行策略的方法。
-
具体策略 (Concrete Strategies) 实现了上下文所用算法的各种不同变体。
-
当上下文需要运行算法时, 它会在其已连接的策略对象上调用执行方法。 上下文不清楚其所涉及的策略类型与算法的执行方式。
-
客户端 (Client) 会创建一个特定策略对象并将其传递给上下文。 上下文则会提供一个设置器以便客户端在运行时替换相关联的策略。
优缺点
优点:
-
你可以在运行时切换对象内的算法。
-
你可以将算法的实现和使用算法的代码隔离开来。
-
你可以使用组合来代替继承。
-
开闭原则。 你无需对上下文进行修改就能够引入新的策略。
缺点:
-
如果你的算法极少发生改变, 那么没有任何理由引入新的类和接口。 使用该模式只会让程序过于复杂。
-
客户端必须知晓策略间的不同——它需要选择合适的策略。
-
许多现代编程语言支持函数类型功能, 允许你在一组匿名函数中实现不同版本的算法。 这样, 你使用这些函数的方式就和使用策略对象时完全相同, 无需借助额外的类和接口来保持代码简洁。
理解体会
策略模式是一种行为设计模式,它使你能够在运行时改变对象的行为。策略模式的强大之处,它可以让我们的代码更加灵活,更易于扩展和维护。
如果合理利用好策略模式,可以非常灵活使用我们的系统,增强灵活性和易维护性。然而,策略模式也有其缺点。如果策略数量过多,客户端需要了解每个策略的差异,以便选择合适的策略。此外,策略模式会增加程序的复杂性,因为需要创建多个策略类。