import java.util.Arrays;
/**
* @author hint
* @creation date 2010-10-6 下午08:22:38
*
*
* 策略模式
*
*/
class Processor{
public String name(){
return getClass().getSimpleName();
}
public Object process(Object input){
return input;
}
}
class Upcase extends Processor{
@Override
public String process(Object input) {
return ((String)input).toUpperCase();
}
}
class Downcase extends Processor{
@Override
public String process(Object input) {
return ((String)input).toLowerCase();
}
}
class Splitter extends Processor{
@Override
public String process(Object input) {
return Arrays.toString((((String)input).split(" ")));
}
}
class Apply{
public static void process(Processor p,Object o){
System.out.println("using process "+p.name());
System.out.println(p.process(o));
}
}
public class StrategyPattern {
public static void main(String[] args) {
String abc = "Hello world, this is a strategy pattern !";
// String str = new String("Hello world, this is a strategy pattern !");
Apply.process(new Downcase(), abc);
System.out.println("1. "+abc);
/*Apply.process(new Upcase(), str);
System.out.println("2. "+str);
Apply.process(new Splitter(), str);*/
}
}
结果为:
using process Downcase
hello world, this is a strategy pattern !
1. Hello world, this is a strategy pattern !
对应的反汇编代码为:
// Compiled from StrategyPattern.java (version 1.6 : 50.0, super bit)
public class chapart9_interface.StrategyPattern {
// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public StrategyPattern();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 58]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: chapart9_interface.StrategyPattern
// Method descriptor #15 ([Ljava/lang/String;)V
// Stack: 4, Locals: 2
public static void main(java.lang.String[] args);
0 ldc <String "Hello world, this is a strategy pattern !"> [16]//从常量池中得到字符串对象("Hello world, this is a strategy pattern !"),并压入栈中;
2 astore_1 [abc]//取栈中数据(赋值给abc)
3 new chapart9_interface.Downcase [18]//创建对象Downcase
6 dup//复制栈顶压入栈
7 invokespecial chapart9_interface.Downcase() [20]
10 aload_1 [abc]//将对象abc引用存储在main方法局部变量1的位置
11 invokestatic chapart9_interface.Apply.process(chapart9_interface.Processor, java.lang.Object) : void [21]
14 getstatic java.lang.System.out : java.io.PrintStream [27]
17 new java.lang.StringBuilder [33]
20 dup
21 ldc <String "1. "> [35]
23 invokespecial java.lang.StringBuilder(java.lang.String) [37]
26 aload_1 [abc]//将对象abc引用存储在main方法局部变量1的位置
27 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [40]
30 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [44]
33 invokevirtual java.io.PrintStream.println(java.lang.String) : void [48]
36 return
}