大家好,我是云图。这次来说说Strategy 策略模式,Strategy 策略模式在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据或者条件的不同选择不同的算法或者策略来完成该功能。 我们先来看看Strategy 策略模式的基本代码。
然后重写AlgorithmIntece方法,各自输出各自的策略方法,最后在写一个Context内容类,里面包含有一个策略类的引用,ContextIntece方法用来调用自己引用的策略方法AlgorithmIntece() , 现在再来看看实现方法
好了,原理搞清楚了,看到这里估计你也明白些什么了。这不就是状态模式的东西吗,楼主是不是没东西写了随便换个名字就拿来忽悠人了。对于说这种话的人我也是呵呵了,怎么就猜的那么准呢
好吧,开个小玩笑,其实不是这样的,状态模式和策略模式使用上看起来基本差不多,但还是分情况的,我也是看了大量资料才理解其中的区别,这个我们先保留意见,在做个小案例,我们再来说说其中的不同。
我们玩CS的时候会有切换武器的操作,比如按1换主武器,2是副武器,3是小刀,4是手雷,我们就用策略模式来试着做下。
首先我们先声明一个武器接口类IWeapons 里面有一个Play方法 然后在写4个子类,就是我们说的4种武器,rifleWeapons 主武器类,pistolWeapons副武器类,
结果都正常的输出了,可以看出 我们在调用的时候也是在武器new上我们需要的参数类,然后给到Player,在player下运行Play方法来运行我们不同的策略方法。
好,到这一步我们再来对比下和状态模式的区别,从逻辑上来说是状态模式注重的是内在的改变,而策略模式注重的是外在的改变,比如我们肚子饿了,想去吃饭,
是吃饭还是吃面包还是吃粉呢,这些食物就是外部的东西,我们没办法看到其内在也不关心,这个时候用策略模式,而当我们选好要吃的食物了,这个时候选择使用什么姿势来吃呢,是蹲着还是坐着,还是站着,这些都是涉及到自身的改变,而我们可以去控制的也关心内在的变化就可以用状态模式。
策略模式是一个比较容易理解和使用的设计模式,策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中“退休”的方便,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性,但是客户端需要理解所有具体策略类之间的区别,以便选择合适的算法,这也是策略模式的缺点之一,在一定程度上增加了客户端的使用难度。返回搜狐,查看更多
推荐: