Java设计模式-策略模式

时间:2022-05-21 21:58:07

        前言

        一年前开始从c语言编程转站到java语言编程,突然发现很多方式不一样,从过程式到OO式,思维一下在完成没有转变过来,即使已经编程了一年时间,却发现对Java的设计模式可以说是一无所知,现在开始学习设计模式,基于《Head First设计模式》。

        策略模式

        定义:策略模式主要是为了定义算法族,分别封装起来,让算法之间可以互相替换,并让算法的变化独立于使用其算法的用户。

         举例:书上经典例子。

如何支持不同类型的鸭子Duck的不同行为,而且可以动态改变行为?

         public abstract class Duck {

class flyBehavior fly;

class QuackBehavior quack;

          }


           public interface QuackBehuavior{

public void quack();

           }

           public interface FlyBehavior{

public void fly();

        }

           1个抽象类和2个接口,分别将Duck抽象出来,并且将其不同行为也抽象出来。这个时候定义到任何具体Duck类,都可以定义自己的fly和quack行为。并且通过set和get方式改变行为。如

public class FlyNoway implement FlyBehavior {

public void fly() {

print "Fly without any";

}

}

public class Quack implement QuackBehavior {

...

}

public class ModelDuck extends Duck {

 public ModelDuck() {

fly = new FlyNoway()

quack = new Quack();

}

public void setFly(FlyBehavior fly) {

this.fly = fly;

}

...

}

这样fly和quack的行为可以动态根据set方法来改变。

策略模式涉及到几个OO设计原则:

1)多用组合,少用继承:好处是,可以动态扩展各类行为

2)针对接口编程,不针对实现编程:利于扩展

3)封装变化:减少以后的需求,对现有代码的修改。


总结

策略模式的实现主要是将需要动态变化的算法(即变化的行为,如fly和quack)使用组合方式写入主体(Duck)中。

PS:请注意体会并在实践中应用。