策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
1. 定义算法族
public interface FlyBehavior {
String fly(); // 飞的行为
}
public interface QuackBehavior {
String quack(); // 叫的行为
}
public class FlyNoWay implements FlyBehavior {
@Override
public String fly() {
return "I can't fly";
}
}
public class FlyRocketPowered implements FlyBehavior {
@Override
public String fly() {
return "I'm flying with a rocket";
}
}
public class MuteQuack implements QuackBehavior {
@Override
public String quack() {
return "Silence";
}
}
public class Quack implements QuackBehavior {
@Override
public String quack() {
return "Quack";
}
}
2. 客户使用算法
public class ModelDuck extends Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public ModelDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
@Override
public String display() {
return "I'm a model duck";
}
}
其中Duck类为:
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
}
public abstract String display();
public String performFly(){
return flyBehavior.fly();
}
public String performQuack(){
return quackBehavior.quack();
}
public String swim(){
return "All ducks float";
}
public void setFlyBehavior(FlyBehavior flyBehavior){
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior){
this.quackBehavior = quackBehavior;
}
}
体现设计原则: 发现变化,封装变化 多用组合,少用继承 针对接口编程,而非实现编程