当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式系列 - 解释器模式

设计模式系列 - 解释器模式

2018年12月29日  | 移动技术网IT编程  | 我要评论
解释器模式通过实现一个表达式接口,从而能够以指定方式解析指定内容 介绍 解释器模式属于行为型模式,通过这种设计模式,我们可以定义一种特定的解释器来解释特定的业务场景,可以类比不同的编程语言的编译器需要设计不同的解释器来编译执行。 类图描述 代码实现 1、定义表达式接口 2、创建接口实体 3、创建规则 ...

解释器模式通过实现一个表达式接口,从而能够以指定方式解析指定内容

介绍

解释器模式属于行为型模式,通过这种设计模式,我们可以定义一种特定的解释器来解释特定的业务场景,可以类比不同的编程语言的编译器需要设计不同的解释器来编译执行。

类图描述

代码实现

1、定义表达式接口

public interface iexpression
{
    bool interpret(string context);
}

2、创建接口实体

public class terminalexpression : iexpression
{
    private string data;

    public terminalexpression(string data)
    {
        this.data = data;
    }
    public bool interpret(string context)
    {
        return context.contains(data);
    }
}

public class andexpression : iexpression
{
    private iexpression expr1 = null;
    private iexpression expr2 = null;
    public andexpression(iexpression expr1, iexpression expr2)
    {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }

    public bool interpret(string context)
    {
        return expr1.interpret(context) && expr2.interpret(context);
    }
}

public class orexpression : iexpression
{
    private iexpression expr1 = null;
    private iexpression expr2 = null;
    public orexpression(iexpression expr1,iexpression expr2)
    {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }
    public bool interpret(string context)
    {
        return expr1.interpret(context) || expr2.interpret(context);
    }
}

3、创建规则,上层调用

class program
{
    static iexpression getmaleexpression()
    {
        iexpression robert = new terminalexpression("robert");
        iexpression john = new terminalexpression("john");
        return new orexpression(robert, john);
    }
    static iexpression getmarriedwomanexpression()
    {
        iexpression julie = new terminalexpression("julie");
        iexpression married = new terminalexpression("married");
        return new andexpression(julie, married);
    }

    static void main(string[] args)
    {
        iexpression ismale = getmaleexpression();
        iexpression ismarriedwoman = getmarriedwomanexpression();

        console.writeline($"john is male? {ismale.interpret("john")}");
        console.writeline($"julie is a married women? {ismarriedwoman.interpret("married julie")}");
        console.readkey();
    }
}

总结

解释器模式可利用的场景比较少,在遇到规则类的业务场景时可以考虑采用这种方式。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网