`

3. 行为型模式 (11) 解释器模式

阅读更多
3. 行为型模式 (11) 解释器模式

解释器模式(Interpreter Pattern)实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

优点:
1. 可扩展性比较好,灵活。
2. 增加了新的解释表达式的方式。
3. 易于实现简单文法。

缺点:
1. 可利用场景比较少。
2. 对于复杂的文法比较难维护。
3. 解释器模式会引起类膨胀。
4. 解释器模式采用递归调用方法。


1. 解释器模式

package com.andrew.pattern0311.interpreter.model01;
public interface Expression {
    public boolean interpret(String context);
}


package com.andrew.pattern0311.interpreter.model01;
public class TerminalExpression implements Expression {
    private String data;
    public TerminalExpression(String data) {
        this.data = data;
    }
    @Override
    public boolean interpret(String context) {
        if (context.contains(data)) {
            return true;
        }
        return false;
    }
}

package com.andrew.pattern0311.interpreter.model01;
public class OrExpression implements Expression {
    private Expression expr1 = null;
    private Expression expr2 = null;
    public OrExpression(Expression expr1, Expression expr2) {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }
    @Override
    public boolean interpret(String context) {
        return expr1.interpret(context) || expr2.interpret(context);
    }
}

package com.andrew.pattern0311.interpreter.model01;
public class AndExpression implements Expression {
    private Expression expr1 = null;
    private Expression expr2 = null;
    public AndExpression(Expression expr1, Expression expr2) {
        this.expr1 = expr1;
        this.expr2 = expr2;
    }
    @Override
    public boolean interpret(String context) {
        return expr1.interpret(context) && expr2.interpret(context);
    }
}


package com.andrew.pattern0311.interpreter.model01;
/**
 * 1. 解释器模式
 * 
 * @author andrew
 * @date 2018/11/08
 */
public class Client {
    public static Expression getMaleExpression() {
        Expression robert = new TerminalExpression("Robert");
        Expression john = new TerminalExpression("John");
        return new OrExpression(robert, john);
    }
    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("Julie is a married women? " + isMarriedWoman.interpret("Married Julie"));
    }
}
运行结果:
John is male? true
Julie is a married women? true
分享到:
评论

相关推荐

    [行为型模式] 解释器模式的理解

    **行为型模式——解释器模式** 解释器模式是一种设计模式,它允许我们为特定语言创建一个解析器。这种模式在处理简单的语言或表达式时特别有用,例如配置文件、简单的编程语言或者数学表达式。解释器模式的核心在于...

    c++设计模式-行为型模式-解释器模式

    c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    11. **解释器模式**:定义一个语言的文法,并提供一个解释器来处理这个文法。 设计模式的使用可以提高代码的可读性、可维护性和可扩展性,是软件工程中的重要工具。理解和熟练应用设计模式,可以帮助开发者解决常见...

    JAVA-设计模式-行为型模式-解释器模式

    JAVA-设计模式-行为型模式-解释器模式

    C#面向对象设计模式纵横谈\16 行为型模式Interpreter解释器模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第16节:行为型模式Interpreter解释器模式

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

    23种设计模式 (创建型,结构型,行为型)

    解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...

    (行为型模式) Interpreter 解释器模式

    C#面向对象设计模式 (行为型模式) Interpreter 解释器模式 视频讲座下载

    设计模式_行为型_解释器模式.md

    解释器模式是设计模式中行为型的一种模式,它主要负责将特定的上下文(Context)中的语法规则转换成一个具体的对象。这种模式在编译原理、文本分析等领域有着广泛的应用。在解释器模式中,我们可以为一个特定的语言...

    设计模式3-行为型模式.doc

    在上述内容中,提到了七种行为型设计模式,分别是责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式。 1. **责任链模式**:责任链模式的核心是建立一个对象链,每个对象都有处理请求的能力,...

    设计模式之解释器模式Java版本实现

    解释器模式是一种行为设计模式,它允许我们定义一个语言的语法,并提供一个解释器来解析该语言中的句子。在Java中实现解释器模式,我们可以创建一个抽象表达式接口,然后为每种特定的语法结构创建一个具体表达式类。...

    设计模式之解释器

    解释器模式是一种行为型设计模式,主要用于处理语言的文法规则、算术规则等问题。它通过定义语言的文法,并根据该文法来解释句子,使得我们可以用统一的方式处理各种语言结构。本文将通过具体的例子——加减运算来...

    Ansy.rar_C语言解释器_解释 语言_解释器_解释器模式_语言解释器

    根据GOF(GoF,设计模式:可复用面向对象软件的基础)的设计原则,解释器模式是一种行为设计模式,用于创建能解析特定语言的解释器。在这个模式中,每个语言的表达式都会被表示为一个类,而这些类共同构成了一个语法...

    C#设计模式源代码1.简单工厂模式 2.工厂方法模式 ...11种

    8. **装饰器模式**:装饰器模式在运行时为对象添加新的行为或责任,它可以动态地改变对象的行为,而不会破坏封装性。 9. **代理模式**:结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式常...

    C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释器模式 (Level 300)

    解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并允许你使用该表示来解释语言中的句子。在C#中,解释器模式常用于构建自定义的编程语言或者解析特定格式的数据,例如配置文件、表达式计算等。 ...

    设计模式之解释器模式(Interpreter)

    **解释器模式(Interpreter)**是一种行为设计模式,它允许我们定义一种语言并为其创建一个解释器。在软件工程中,这种模式常用于处理简单的语言或表达式,例如配置文件、计算公式或者简单的脚本语言。通过使用解释...

    23种设计模式-行为型模式.docx

    在给定的文档中,提到了23种设计模式中的几种行为型模式,包括责任链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、策略模式、模板方法模式、状态模式、观察者模式以及备忘录模式。下面将对这些...

Global site tag (gtag.js) - Google Analytics