Strategy Pattern

Strategy,策略模式,它是一种对象行为型模式,也称政策(Policy)模式,似乎可以简单概括为:一类行为,多种策略实现。OO 原则中的向上依赖其实很好地体现在这个模式中了。

【意图】定义一系列算法,把它们封装起来,并且使它们可以相互替换。

举例如下:

猫猫叫和狗狗叫,都是动物叫(一类行为),但它们各自的叫声又有不同(多种策略实现):猫猫喵喵,狗狗汪汪。

Strategy pattern

(光从类图上看,和状态模式很相似。不过设计模式的区分主要在语义上,并不是语法上。)

用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)。

参考