解释器模式

解释器模式:通过解析器对象处理一个给定的规则,把复杂的功能分离开,让客户端选择要执行的功能。下面是个小demo,巧妙之处在Context对象的处理上:

package com.jerry.design.interpreter;

import java.util.ArrayList;
import java.util.List;


	// 测试类
public class Test {

	public static void main(String[] args) {
		   String number = "200"; 
           Context context = new Context(number); 
		   List<Expression> list = new ArrayList<Expression>(); 
	        list.add(new PlusExpression()); 
	        list.add(new MinusExpression()); 
	        list.add(new MinusExpression()); 
	        list.add(new PlusExpression()); 
	        list.add(new MinusExpression()); 
	        list.add(new MinusExpression()); 
	        for(Expression ex : list) { 
	            ex.interpret(context); 
	            System.out.println(context.getOutput()); 
	        } 
		}
}
class Context { 
    
    private String input; 
    private int output; 
     
    public Context(String input) { 
        this.input = input; 
    } 
     
    public String getInput() { 
        return input; 
    } 
    public void setInput(String input) { 
        this.input = input; 
    } 
    public int getOutput() { 
        return output; 
    } 
    public void setOutput(int output) { 
        this.output = output; 
    } 
}

/* 
 * 抽象解释器 
 */ 
abstract class Expression { 
     
    public abstract void interpret(Context context); 
     
}

class MinusExpression extends Expression { 
	 
    public void interpret(Context context) { 
        System.out.println("自动递减"); 
        String input = context.getInput(); 
        int inInput = Integer.parseInt(input); 
        --inInput; 
        context.setInput(String.valueOf(inInput)); 
        context.setOutput(inInput); 
    } 
 
}

class PlusExpression extends Expression { 
	 
    public void interpret(Context context) { 
        System.out.println("自动递增"); 
        String input = context.getInput(); 
        int intInput = Integer.parseInt(input); 
        ++intInput; 
        context.setInput(String.valueOf(intInput)); 
        context.setOutput(intInput); 
    } 
 
}





你可能感兴趣的:(模式)