Stringをパラメータとして渡す

3746 ワード

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
}