策略模式浅析

来源:互联网 发布:梦想 知乎 编辑:程序博客网 时间:2024/06/06 11:43

先说下官话策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。举个例子就比如说我们有很多个if else 判断if else判断就拿下面的代码来举个例子,就比如我们是要根据某个特定的条件去判断做不一样的处理的话,我们堆在一起,这样根据条件判断的语句会变得很长以后看起来其实也很难的去维护,所以我们可以考虑利用策略模式来做。

   int i=1;        if(i==1)    {            }    else if(i==2)    {            }    else if(i==3)    {            }    else    {            }
策略模式的话其实就是这样的我们对于每一种情况自己去设计一个算法,这样集合成一个算法族在要调用的时候去调用其实就可以了。就比如说可能我们会在给为顾客服务推销的时候我们会根据顾客现在拥有的钱的数量给顾客安排不同的购买方案,如果需要这样的话其实我们就可以先定义一个抽象类,抽象类里面拥有一个根据顾客所拥有的钱数去判断给顾客推销什么,但是里面得到业务逻辑是没有处理的是抽象方法,然后再给每种情况去创建一个类继承这个抽象类去实现相应的代码,这样的话代码就会比较好维护,当然为了更简单的话其实我们还可以去创建一个类context,让这个类引用着那个抽象类,这样我们的只需要去和这个context类交互就可以了,这样外面的类调用的时候知道的事情越少越好,为了更好的理解其实可以看张图。


就比如说我有一个context的实例,我们在使用的时候,可以使用不同的strategy对象来进行配置,这就是对这个context实例的一个策略。

其实视图和控制器就是一种基于策略模式的关系,因为控制器是决定视图对模型数据进行展示的时间和内容,而同一个视图是可能会被用到不同的控制器的,这样的话就说明不同控制器其实就是不同的策略,所以可以说是基于策略模式的实现。

一般来说策略模式用在一个类中在操作的时候要使用大量的if else或者是switch case来定位许多的行为,我们可以把相关的条件分支转到它们的策略类当中,还有就是需要算法的各种变体的,另外一种就是需要避免把复杂的和与算法相关的数据结构暴露给客户端的。

原创粉丝点击