在开发中经常会遇到一种情况,对于同一种类型的数据进行有差别的处理方式,处理方式遵循同一种模式,但是在逻辑上有差别。符合这种情况,就可以用策略模式了。
类的继承就可实现策略模式,但接口使代码的可扩展性得到了极大的提升,代码的复用程度也更高。
以下是简单的策略设计模式的例子,来自 《On Java 8》
interface Processor {
default String name() {
return getClass().getSimpleName();
}
Object process(Object input);
}
public interface StringProcessor extends Processor {
@Override
String process(Object input);
String S = "If she weighs the same as a duck, she's made of wood";
static void main(String[] args) {
Applicator.apply(new Upcase(), S);
Applicator.apply(new Downcase(), S);
Applicator.apply(new Splitter(), S);
}
}
class Applicator {
public static void apply(Processor processor, Object o) {
System.out.println("Using processor " + processor.name());
System.out.println(processor.process(o));
}
}
class Upcase implements StringProcessor {
// 返回协变类型
@Override
public String process(Object input) {
return ((String) input).toUpperCase();
}
}
class Downcase implements StringProcessor {
@Override
public String process(Object input) {
return ((String) input).toLowerCase();
}
}
class Splitter implements StringProcessor {
@Override
public String process(Object input) {
return Arrays.toString(((String) input).split(" "));
}
}
Applicator 类的 apply 方法是一个策略方法,接收对应的策略和数据。