策略模式定义的算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的用户
/* 飞的行为 */ public interface FlyBehavior{ void fly(); } /* 鸟叫的行为 */ public interface ChirpBehavior{ void chirp(); } /* 飞的行为实现类,用翅膀飞行 */ public class FlyWithSwings implements FlyBehavior{ @Override public void fly() { System.out.println("I'm fly with swings."); } } /* 鸟叫声实现类,乌鸦叫 */ public class Cow implements ChirpBehavior{ @Override public void chirp() { System.out.println("cow cow"); } } /* 基类,鸟 */ public abstract class Bird{ /* 父类提供声明,子类实例化 */ FlyBehavior flyBehavior; ChirpBehavior chirpBehavior; public void performFly(){ flyBehavior.fly(); } public void performChirp(){ chirpBehavior.chirp(); } public abstract void display(); } /* 乌鸦 */ public class Crow extends Bird{ /* 构造方法,定义自己的实现方式 */ public Crow(){ flyBehavior = new FlyWithSwings(); chirpBehavior = new Cow(); } @Override public void display(){ System.out.println("I'm a crow."); } } /* 测试类 */ public class BirdTest{ public static void main(String[] args){ Bird crow = new Crow(); crow.performFly(); crow.performChirp(); } }输出: I’m fly with swings. I’m a crow.
