------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
//:interfaces/classprocessor/Apply.java
package interfaces.classprocessor;
importjava.util.*;
import staticnet.mindview.util.Print.*;
class Processor {
public String name() {
return getClass().getSimpleName();
}
Object process(Object input) { return input;}
}
class Upcaseextends Processor {
String process(Object input) { // Covariantreturn
return ((String)input).toUpperCase();
}
}
class Downcaseextends Processor {
String process(Object input) {
return ((String)input).toLowerCase();
}
}
class Splitterextends Processor {
String process(Object input) {
// The split() argument divides a Stringinto pieces:
returnArrays.toString(((String)input).split(" "));
}
}
public class Apply{
public static void process(Processor p,Object s) {
print("Using Processor " +p.name());
print(p.process(s));
}
public static String s =
"Disagreement with beliefs is bydefinition incorrect";
public static void main(String[] args) {
process(new Upcase(), s);
process(new Downcase(), s);
process(new Splitter(), s);
}
} /* Output:
Using ProcessorUpcase
DISAGREEMENT WITHBELIEFS IS BY DEFINITION INCORRECT
Using ProcessorDowncase
disagreement withbeliefs is by definition incorrect
Using ProcessorSplitter
[Disagreement,with, beliefs, is, by, definition, incorrect]
*///:~
只要一个方法操作的是类,而非接口,那么就只能使用这个类及其子类,如果想要将这个方法应用于不在此继承结构专用的某个类,那么就行不通。而接口很大程度上放宽了这种限制。因此可以编写可复用性更好的代码。
创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这类方法包含所要执行的算法中固定不变的部分,而策略包含变化的部分。策略就是传递进去的参数对象,它包含要执行的代码。在例子中,Processor对象就是一个策略,在main()中可以看到有三种不同的类型策略应用到了String类型的s对象上。