策略模式的定义很简单,那就是根据传入的参数类型而执行不同的行为的方法。方法包含算法中不变的部分,策略包含变化的部分,实际上策略就是传入的参数对象。具体看下例子
//定义一个策略接口
public interface Processor {
Object process(Object obj);
}
//实现一个字符串分割的策略
public class SplitStringProcessor implements Processor {
@Override
public String process(Object obj) {
return Arrays.toString(((String) obj).split(" "));
}
}
//实现一个返回字符串的策略
public class StringProcessor implements Processor {
@Override
public String process(Object obj) {
return (String)obj;
}
}
//实现一个字母都为大写的策略
public class UpperCaseStringProcessor implements Processor {
@Override
public String process(Object obj) {
return ((String)obj).toUpperCase();
}
}
//执行策略的类
public class Applicator {
public static void apply(Processor p, Object o){
System.out.println(p.process(o));
}
public static void main(String[] args) {
String str = "We are such stuff as dreams are made on";
Applicator.apply(new SplitStringProcessor(),str);
Applicator.apply(new StringProcessor(),str);
Applicator.apply(new UpperCaseStringProcessor(),str);
}
}