Strategy Pattern
Strategy,策略模式,它是一种对象行为型模式,也称政策(Policy)模式,似乎可以简单概括为:一类行为,多种策略实现。OO 原则中的向上依赖其实很好地体现在这个模式中了。
【意图】定义一系列算法,把它们封装起来,并且使它们可以相互替换。
举例如下:
猫猫叫和狗狗叫,都是动物叫(一类行为),但它们各自的叫声又有不同(多种策略实现):猫猫喵喵,狗狗汪汪。
(光从类图上看,和状态模式很相似。不过设计模式的区分主要在语义上,并不是语法上。)
用Java实现如下:
public class Main {
public static void main(String[] args) {
Pet pet1 = new Pet(new Dog());
pet1.sayHi();
Pet pet2 = new Pet(new Cat());
pet2.sayHi();
}
}
public class Pet {
private Animal animal;
public Pet(Animal animal) {
this.animal = animal;
}
void sayHi() {
animal.sayHi();
}
}
/**
* 所谓的策略接口
*/
public interface Animal {
void sayHi();
}
/**
* 具体的策略之一
*/
public class Cat implements Animal {
@Override
public void sayHi() {
System.out.println("miaomiao");
}
}
/**
* 具体的策略之一
*/
public class Dog implements Animal {
@Override
public void sayHi() {
System.out.println("wangwang");
}
}
其他,感觉 Spring 中的 IoC 实现用到这个模式(TODO)。
参考