解释器模式

解释器模式:通过解析器对象处理一个给定的规则,把复杂的功能分离开,让客户端选择要执行的功能。下面是个小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); 
    } 
 
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值