设计模式学习—解释器模式

一、我的理解


目前对解释器模式的理解就是采用一个统一的接口,然后由底下的类来实现具体的翻译工作,有点是从语义方面来判断这种模式。。。具体仍待学习。。。。


二、实现方式


定义一个接口,其他类实现该接口即称作一个解释器


三、实例



Java代码:

Expression接口:统一对外接口

package com.study.dp.interpreter;

public interface Expression {

	public boolean interpret(String context);
	
}
TerminalExpression类:实现了Expression接口的类,实际执行命令内容

package com.study.dp.interpreter;

public class TerminalExpression implements Expression {

    private String data;
    
    public TerminalExpression(String data) {
        super();
        this.data = data;
    }

    @Override
    public boolean interpret(String context) {
        if(context.contains(data)) {
            return true;
        }
        return false;
    }

}
OrExpression类:组合两种解释器,返回其两者结果的或操作

package com.study.dp.interpreter;

public class OrExpression implements Expression {
    
    private Expression expr1;
    private Expression expr2;
    
    public OrExpression(Expression expr1, Expression expr2) {
        super();
        this.expr1 = expr1;
        this.expr2 = expr2;
    }

    @Override
    public boolean interpret(String context) {
        return expr1.interpret(context) || expr2.interpret(context);
    }

}
AndExpression类:组合两种解释器,返回其两者结果的与操作

package com.study.dp.interpreter;

public class AndExpression implements Expression {
    
    private Expression expr1;
    private Expression expr2;

    public AndExpression(Expression expr1, Expression expr2) {
        super();
        this.expr1 = expr1;
        this.expr2 = expr2;
    }

    @Override
    public boolean interpret(String context) {
        return expr1.interpret(context) && expr2.interpret(context);
    }

}
Demo类:测试代码

package com.study.dp.interpreter;

public class Demo {

    // 规则:Robert和John是男性
    public static Expression getMaleExpression() {
        Expression robert = new TerminalExpression("Robert");
        Expression john = new TerminalExpression("John");
        return new OrExpression(robert, john);
    }
    
    // 规则:Julie是一个已婚的女性
    public static Expression getMarriedWomanExpression() {
        Expression julie = new TerminalExpression("Julie");
        Expression married = new TerminalExpression("Married");
        return new AndExpression(julie, married);
    }
    
    public static void main(String[] args) {
        Expression isMale = getMaleExpression();
        Expression isMarriedWoman = getMarriedWomanExpression();
        
        System.out.println("John is male? " + isMale.interpret("John"));
        System.out.println("Jullie is a married woman? "+isMarriedWoman.interpret("Married Julie"));
    }
    
}

四、应用场景


可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值