策略模式提供了更灵活的扩展能力。定义了不同的算法族,分别封装起来,方便彼此相互替代。
来吧来吧 ,小鸭子的故事,既然head first的例子举得这么好,我也就不绞尽脑汁的再想其他故事啦。
不同的会飞的鸭子
飞的类型有不同种
public interface FlyBehavior{
public void fly();
}
public class FlyWithWings implements FlyBehavior{
public void fly(){System.out.printIn("I'm flying!");}
}
publuc class FLyNoWay impelments FlyBehavior{
public void fly(){System.out.printIn("I can't fly!");}
}
通用父类
public abstract class Duck {
FlyBehavior flyBehavior;
publicDuck(){}
public abstract display();
public void performFly(){
flyBehavior.fly();
}
public void setFlyBehavior(FlyBehavior flyBehavior){
this.flyBehavior=flyBehavior;
}
}
实现类
public class MallarDuck extends Duck{
public MallarDuck(){
//子类去完成具体实现
flyBehavior=new FlyWithWings();
}
public voidd isplay(){
System.out.println("I'm a real Mallard duck!");}
}
测试类
public static voidm ain(String[] args){
// 父类引用,指向子类对象,该引用只能调用父类中定义的方法和变量。如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
Duck mallardDuck=new MallarDuck();
mallardDuck.setFlyBehavior(new FlyWithWings());
mallardDuck.performFly();
}
}
网友评论