策略模式

       策略模式提供了更灵活的扩展能力。定义了不同的算法族,分别封装起来,方便彼此相互替代。

      来吧来吧 ,小鸭子的故事,既然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();

}

}

你可能感兴趣的:(策略模式)