定义:定义了一系列的算法家族(策略),一个父类多个子类的形式(继承)。提供给第三方使用时,能够自由的互相替换。 然后定义一个Context类,该类对外提供这些策略的使用。即第三方与整个算法家族进行交互,只需要跟Context产生耦合。 相比简单工厂模式,第三方使用工厂提供的对象,既要知道工厂类,又要知道父类。
策略模式与简单工厂模式很相似,解决的问题也相同,只不过第三方系统与其交互时,策略模式耦合更少,只需要与Context交互。 但是策略模式内部实现比简单工厂模式复杂些,本例是在Context中采用了工厂模式。
UML
继承:
abstract class Parent{
public abstract String doSomething(String input);
}
class Son1 extends Parent{
@Override
public String doSomething(String input){
System.out.println(input);
return input + "son1";
}
}
class Son2 extends Parent{
@Override
public String doSomething(String input){
System.out.println(input);
return input + "son2";
}
}
Context类
class Context{
private Parent instance = null;
public Context(String type){
switch (type){
case "son1":
instance = new Son1();
break;
case "son2":
instance = new Son2();
break;
default:
throw new RuntimeException();
}
}
public String getResult(String input){
return instance.doSomething(input);
}
}
使用
public class TestMain {
public static void main(String[] args) throws Exception{
Context context = new Context("son1");
String result = context.getResult("test");
}
}