GoF之策略模式(Strategy)

Posted Recho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoF之策略模式(Strategy)相关的知识,希望对你有一定的参考价值。

定义

  定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们能更加独立

    在策略模式中,这些不同的计算方式就是所谓的算法,而这些算法中的每一个

都应该独立出来,将计算的细节加以封装隐藏,并让它们成为一个算法类群组。客户端

只需根据情况来选择对应的算法即可,至于计算方式及规则,客户端不需要去理会。

 


 

策略模式和状态模式

  两者的结构类图十分相似,两者都被GoF归类在行为模式(Behavioral Patterns)分类下,

都是由一个Context类来维护对象引用,并借此调用提供功能的方法。

  State是在一群状态中进行切换,状态之间由对应和连接的关系;Strategy则是由一群没有

任何关系的类所组成的,不知道彼此的存在。

  State受限于状态机的切换规则,在设计的初期就会定义所有可能的状态,就算后期追加也

需要和现有的状态有所关联,而不是想加入就加入;Strategy是由封装计算方法而形成的一种

设计模式,算法之间不存在任何的依赖关系,有新增的算法就可以马上加入或者替换。  

 


 

策略模式的应用

  角色扮演型游戏(RPG)的属性计算系统,使用到“转换计算”的方式来获取角色最终要使用的属性

  网络游戏的注册账号的方式等等

 

  因条件不同而需要有所选择时,刚入门的时候我们可能都会第一想到的是switch case语句

或者if else来实现,但遇到有一定规模需要长期维护的项目时候,最好选用策略模式,这样将有

利于项目的维护。

  将复杂的公式计算从客户端独立出来成为一个群组,之后客户端可以按照情况来决定使用的

计算公式策略,既可以提高系统应用的灵活程度,也强化了系统中对所有计算策略的维护方式。让

后续开发人员很容易就找出相关计算公式的差异,同时将修改点也缩小到计算公式本身,不会影响到

客户端。

 

 

  

  

  

 

以上是关于GoF之策略模式(Strategy)的主要内容,如果未能解决你的问题,请参考以下文章

22-策略(Strategy)模式Ruby实现

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)

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

设计模式之策略模式(Strategy)详解及代码示例

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