策略模式定义:分别封装行为接口,实现算法族,超累里面放接口对象,在子类中具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。
下面使用一个例子来实现策略模式:
比如我们要描述一个鸭子类,鸭子的颜色有红色,白色,绿色,有的鸭子会飞,有的鸭子不会飞。
第一步抽象可变的部分为接口,代码:
颜色:
//颜色接口
public interface Color{
public void showColor();
}
飞行:
public interface Fly{
public void flyLevel();
}
颜色的接口族
public class Whiet implements Color{
@Override
public void showColor(){
System.out.println("----白色的鸭子----");
}
}
public class Red implements Color{
@Override
public void showColor(){
System.out.println("---红色的鸭子----");
}
}
飞行的接口族:
public class CanFly implements Fly{
@Override
public void flyLevel(){
System.out.println("----飞行能力挺好-----");
}
}
public class NoFly implements Fly{
@Override
public void flyLevel(){
System.out.println("-------没有飞行能力-----");
}
}
ok,现在加入我们要实现一个白色会飞的鸭子,只需要定义好一个白色会飞鸭子的模板即可:
“`
public abstract Duck{
public Color color;
public Fly fly;
public void color(){
color.showColor();
}
public void fly(){
fly.flyLevel();
}
//下面可以增加抽象方法
}
public class WhiteFlyDuck extends Duck{
public WhiteFlyDuck(){
color = new Whiet ();
fly = new CanFly ();
}
//下面实现抽象方法
}
这样的话可以不仅使用继承来减少重复代码,而且又可以使用接口族来组合出不同的抽象类.