定义
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
设计原则
- 找出应用中可能需要变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起。
- 针对接口编程,而不是针对实现编程。
- 多用组合,少用继承。
代码demo
鸭子基类
public abstract class Duck {
public FlyBehavior fly;
public void setFly(FlyBehavior fly){
this.fly=fly;
}
public void quack(){
System.out.println("鸭子叫。。。。。。。。。。。。。。");
}
public void swim(){
System.out.println("鸭子游泳.............");
}
public void performFly(){
fly.fly();
}
public abstract void display();
}
飞行方法抽象类
public interface FlyBehavior {
public void fly();
}
飞行方法的几个具体实现(算法族)
public class FlyFast implements FlyBehavior{
public void fly() {
System.out.println("我飞的特别快");
}
}
public class Flynoway implements FlyBehavior{
public void fly() {
System.out.println("我不会飞");
}
}
public class FlySlow implements FlyBehavior{
public void fly() {
System.out.println("我飞的比较慢");
}
}
鸭子子类的具体实现
public class RedheadDuck extends Duck{
public RedheadDuck(FlyBehavior fly) {
super.fly = fly;
}
@Override
public void display() {
System.out.println("我的颜色是红色");
}
}
public class MollaryDuck extends Duck{
public MollaryDuck(FlyBehavior fly) {
super.fly = fly;
}
@Override
public void display() {
System.out.println("我是绿头鸭子");
}
}
测试
public class Unittest {
public static void main(String[] args) {
FlyFast ffast = new FlyFast();
FlySlow fslow = new FlySlow();
Flynoway fno = new Flynoway();
Duck rduck = new RedheadDuck(fslow);
rduck.display();
rduck.performFly();
rduck.swim();
rduck.quack();
}
}