策略模式定义的算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的用户
/* 飞的行为 */
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.