策略模式(Strategy)
Strategy就是"策略"的意思, 指的是与敌军对垒时行军作战的方法。在编程中,我们可以将他理解为“算法”
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。
通过接口将解决同一个问题的不同的算法封装起来,相互替换,从而可以应用于解决同一问题的不同的对象中。
正如下图所示:
Context:就相当于解决问题的对象,其中有Strategy接口的属性:可以更换实现了Strategy接口的类的实例,从而达到使用不同的算法。
Strategy:负责决定策略所必需的接口
ConcreteStrategy1、ConcreteStrategy2: 具体的策略,即不同的算法
为什么需要特意编写Strategy角色
通常在编程时算法会被写在具体方法中。 Strategy模式却特意将算法与其他部分分离开来,只是定义了与算法相关的接口(API),然后再程序中以委托的方式来使用算法。使用委托这种弱关联关系可以很方便地整体替换算法。
相关设计模式
Flyweight模式
有时会使用Flyweight模式让多个地方可以共用ConcreteStrategy角色
Abstract Factory模式
使用Strategy模式可以整体地替换算法
使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品
State模式
两个模式都可以替换被委托对象,而且他们的类之间的关系也很相似。但是两种模式的目的不同
在Strategy模式中,ConcreteStrategy角色是表示算法的类。可以替换被委托对象的类,如果没有必要,也可以不替换
在State模式中,ConcreteState角色是表示“状态”的类。每次状态变化时,被委托对象的类都必定会被替换。
百度百科:
借鉴博客: https://blog.csdn.net/u012124438/article/details/70039943/
借鉴书籍:《图解设计模式》