解释器模式
//解释器模式--真实例子
//CopyRight(C) CAnca software Office.2006
//Created by CAnca.
import java.util.*;
public class InterpretMode_RealWorld{
public static void main(String[] args){
final String str = "0零1九2六3四4一5三6六7七8八9二";
Context context = new Context(str);
ArrayList list = new ArrayList();
list.add(new numToChinese());
list.add(new chineseToNum());
for(int i = 0 ; i < list.size() ; i++){
AbstractExpression expression = (AbstractExpression)list.get(i);
expression.Interpret(context);
}
}
}
class Context{
private String input = "";
private String output = "";
public Context(String input){
this.input = input;
}
public String getInput(){
return input;
}
public void setOutput(String context){
this.output = context;
}
public String getOutput(){
return this.output;
}
}
abstract class AbstractExpression{
abstract void Interpret(Context context);
abstract char Zero();
abstract char One();
abstract char Two();
abstract char Three();
abstract char Four();
abstract char Five();
abstract char Six();
abstract char Seven();
abstract char Eight();
abstract char Night();
}
class numToChinese extends AbstractExpression{
public void Interpret(Context context){
String str = "";
for(int i = 0 ; i < context.getInput().length() ; i++){
char word = context.getInput().charAt(i);
switch(word){
case '0':str += Zero();break;
case '1':str += One();break;
case '2':str += Two();break;
case '3':str += Three();break;
case '4':str += Four();break;
case '5':str += Five();break;
case '6':str += Six();break;
case '7':str += Seven();break;
case '8':str += Eight();break;
case '9':str += Night();break;
default:str += word;break;
}
}
context.setOutput(str);
System.out.println("Number To Chinese Interpreted String:" + context.getOutput());
}
public char Zero(){return '零';}
public char One(){return '一';}
public char Two(){return '二';}
public char Three(){return '三';}
public char Four(){return '四';}
public char Five(){return '五';}
public char Six(){return '六';}
public char Seven(){return '七';}
public char Eight(){return '八';}
public char Night(){return '九';}
}
class chineseToNum extends AbstractExpression{
public void Interpret(Context context){
String str = "";
for(int i = 0 ; i < context.getInput().length() ; i++){
char word = context.getInput().charAt(i);
switch(word){
case '零':str += Zero();break;
case '一':str += One();break;
case '二':str += Two();break;
case '三':str += Three();break;
case '四':str += Four();break;
case '五':str += Five();break;
case '六':str += Six();break;
case '七':str += Seven();break;
case '八':str += Eight();break;
case '九':str += Night();break;
default:str += word;break;
}
}
context.setOutput(str);
System.out.println("Chinese To Number Interpreted String:" + context.getOutput());
}
public char Zero(){return '0';}
public char One(){return '1';}
public char Two(){return '2';}
public char Three(){return '3';}
public char Four(){return '4';}
public char Five(){return '5';}
public char Six(){return '6';}
public char Seven(){return '7';}
public char Eight(){return '8';}
public char Night(){return '9';}
}