import java.util.Arrays;
public class Test2 {
public static void get(Processor p,Object input){
System.out.println(p.name());
System.out.println(p.process(input));
}
public static String s="Happy bir";
public static void main(String[] args){
get(new Downcase(),s);
get(new Upcase(),s);
get(new Splitter(),s);
}
}
class Processor{
public String name(){
return getClass().getSimpleName();
}
Object process(Object input){
return input;
}
}
class Downcase extends Processor{
String process(Object input){
return ((String)input).toLowerCase();
}
}
class Upcase extends Processor{
String process(Object input){
return ((String)input).toUpperCase();
}
}
class Splitter extends Processor{
String process(Object input){
return Arrays.toString(((String)input).split(" "));
}
public class Test2 {
public static void get(Processor p,Object input){
System.out.println(p.name());
System.out.println(p.process(input));
}
public static String s="Happy bir";
public static void main(String[] args){
get(new Downcase(),s);
get(new Upcase(),s);
get(new Splitter(),s);
}
}
class Processor{
public String name(){
return getClass().getSimpleName();
}
Object process(Object input){
return input;
}
}
class Downcase extends Processor{
String process(Object input){
return ((String)input).toLowerCase();
}
}
class Upcase extends Processor{
String process(Object input){
return ((String)input).toUpperCase();
}
}
class Splitter extends Processor{
String process(Object input){
return Arrays.toString(((String)input).split(" "));
}
}
自己的理解://策略就是把定义一个get方法,参数为一个Processor的实例p,第二个参数是这个类中的一个方法需要传入的参数input,通过这两个参数就可以调用
//p.get(input)。就是利用参数可以直接完成某一个类中的方法调用,并且在使用的时候,根据第一个参数可以使用Processor的导出类,这样可以具有不同的行为。
书中描述:Test2的get()方法可以接受任何类型的Processor,并将其应用到一个Object对象上,然后打印结果。像这个例子,创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。策略就是传递进去的参数,它包含要执行的代码。这里,Processor对象就是一个策略,在main( )中可以看到有三种不同类型的策略应用到了String类型的s对象上。