设计模式-解释器模式

1.定义

给定一个语言,定义它的语法表示,并使用一个解释器来解释语法或表达式

2.使用场景及设计

2.1.使用场景

可以用于sql解析,或者特殊符号处理等

2.2.设计

此处设计一个and语法解析器,类图如下:
在这里插入图片描述

3.测试代码

package com.glt.designpattern.interpreter;

public class InitMain {
    public static void main(String[] args) {
    
        VarExpression mail = new VarExpression("mail");
        VarExpression phone = new VarExpression("phone");

        AndExpression andExpression = new AndExpression(mail, phone);
        boolean b = andExpression.interpret("this contarin mail and phone");
        System.out.println(b);

    }
}

package com.glt.designpattern.interpreter;

/**
 * 表达式接口
 */
public interface Expression {
    public boolean interpret(String data);
}

package com.glt.designpattern.interpreter;

/**
 * 基础表达式
 */
public class VarExpression implements Expression {

    private String exp;

    public VarExpression(String exp) {
        this.exp = exp;
    }

    @Override
    public boolean interpret(String con) {
        return con.contains(this.exp);
    }
}

package com.glt.designpattern.interpreter;

/**
 * And语法类
 */
public class AndExpression implements Expression {

    private VarExpression exp1;
    private VarExpression exp2;

    public AndExpression(VarExpression str1, VarExpression str2) {
        this.exp1 = str1;
        this.exp2 = str2;
    }

    @Override
    public boolean interpret(String data) {
        return exp1.interpret(data) && exp2.interpret(data);
    }
}

输出结果

true
Process finished with exit code 0

4.总结

优点:

  • 每一个语法规则标识一个类
  • 方便实现语言 因为一个语法由一个类表示,因此可以轻易的改变或者扩展新的语法规则
  • 可以在类中加入新的方法来增加新的行为
    缺点:
    可使用场景较少,如果用上此设计模式一般内容都会比较复杂,像java中语法树等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值