设计模式之策略模式(Strategy)

 

策略模式(Strategy)

 Strategy就是"策略"的意思, 指的是与敌军对垒时行军作战的方法。在编程中,我们可以将他理解为“算法”

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。

通过接口将解决同一个问题的不同的算法封装起来,相互替换,从而可以应用于解决同一问题的不同的对象中。

正如下图所示:

Context:就相当于解决问题的对象,其中有Strategy接口的属性:可以更换实现了Strategy接口的类的实例,从而达到使用不同的算法。

Strategy:负责决定策略所必需的接口

ConcreteStrategy1、ConcreteStrategy2: 具体的策略,即不同的算法

设计模式之策略模式(Strategy)

为什么需要特意编写Strategy角色

    通常在编程时算法会被写在具体方法中。 Strategy模式却特意将算法与其他部分分离开来,只是定义了与算法相关的接口(API),然后再程序中以委托的方式来使用算法。使用委托这种弱关联关系可以很方便地整体替换算法。

相关设计模式

Flyweight模式

    有时会使用Flyweight模式让多个地方可以共用ConcreteStrategy角色

Abstract Factory模式

    使用Strategy模式可以整体地替换算法

    使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品

State模式

    两个模式都可以替换被委托对象,而且他们的类之间的关系也很相似。但是两种模式的目的不同

    在Strategy模式中,ConcreteStrategy角色是表示算法的类。可以替换被委托对象的类,如果没有必要,也可以不替换

    在State模式中,ConcreteState角色是表示“状态”的类。每次状态变化时,被委托对象的类都必定会被替换。

 

百度百科:

借鉴博客: https://blog.****.net/u012124438/article/details/70039943/ 

借鉴书籍:《图解设计模式》