定义
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
实际例子
在Head First 设计模式的开篇就讲了一个策略模式的例子。
要实现一组鸭子类,每种鸭子类可能有不同的叫声、外形和飞行方式。
将鸭子作为一个抽象父类,同时定义叫声接口,外形接口,飞行接口。并对每一种叫声、外形、飞行方式都有一个具体的实现类(实现对应接口)。而在鸭子类中持有叫声、外形和飞行方式三个接口类型的成员变量。
对于具体的一种鸭子,在构造方法里使用不同的行为实现类对叫声、外形和飞行方式进行初始化。
具体代码:(在三个行为中只包括叫声接口)
//鸭子父类
public abstract class Duck {
private FlyBehavior flyBehavior;
public void performFly() {
flyBehavior.fly();
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public FlyBehavior getFlyBehavior() {
return flyBehavior;
}
}
//飞行接口
public interface FlyBehavior {
void fly();
}
//飞行实现类
public class FlyWithWing implements FlyBehavior {
@Override
public void fly() {
System.out.println("fly with wing!");
}
}
//具体鸭子类
public class BigDuck extends Duck {
public BigDuck() {
setFlyBehavior(new FlyWithWing());
}
public static void main(String[] args) {
Duck duck = new BigDuck();
duck.performFly();
}
}
设计模式原则总结1
- 封装变化
- 多用组合,少用继承
- 针对接口而不是实现编程
网友评论