设计原则:
- 封装变化
- 多用组合,少用继承
- 针对接口编程,不针对实现编程
策略模式
策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
public abstract class Duck{
FlyBehavior flyBehavior;//多用组合
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void setFlyBehavior (FlyBehavior flyBehavior){
this.flyBehavior=flyBehavior;//动态修改FlyBehavior
}
}
interface FlyBehavior{
public void fly();//针对接口编程
}
class FlyWithWings implements FlyBehavior{
public void fly(){//针对接口编程
System.out.println("I'm flying with wings");
}
}
class NoFly implements FlyBehavior{
public void fly(){//针对接口编程
System.out.println("I'm can't fly");
}
}
以Duck为例子,继承Duck例子之后可以通过设定不同的FlyBehavior 实现来赋予子类不同的行为。此处FlyBehavior就是算法族,FlyWithWings 是算法的一个具体实现。FlyBehavior的变化独立于Duck的实现。setFlyBehavior ()可以动态更改行为。