策略模式在JAVA中体现出了组合优于集成的特点。
相比于在继承中写入固定的算法,策略模式提供了一种更加富有弹性的注入方法,这一特性依赖于JAVA多态的特性。
具体用例子就知道了
Class Duck()
{
fly(){...}
}
比如我们有一个Duck类,现在有个WildDuck类继承自duck类,实现了自己的fly方法,然后有个CityDuck类也继承了Duck,但是CityDuck和WildDuck的fly实现是完全一样的,所以这个fly方法其实是可以避免重复的,如果你觉得写两个重复的方法也并不是很费时的话,那想想如果Duck类还有个walk()方法,然后又有三个子类的walk方法是一样的,怎么办呢,再重复三遍同样的代码吗,这样越到后面就会越让人觉得难以接受。
所以怎么做呢,策略模式给了我们一个很好的方案。
即我们增加一个fly接口
interface FlyBehavior()
{
fly();
}
我们对Duck类进行改造
class Duck implements FlyBehavior
{
FlyBehavior flyBehavior;
public Duck(FlyBehavior flyBehavior)
{
this.flyBehavior =flyBehavior;
}
}
这样我们就将FlyBehavior这个动作抽象出来并注入到Duck类种,此时我们我们再联系之前的场景,就可以将具体的FlyBehavior实现类传入到WilldDuck类和CityDuck类种,他们将调用FlyBehavior的具体实现