频道栏目
首页 > 资讯 > Java > 正文

java设计模式 解释器模式

17-06-07        来源:[db:作者]  
收藏   我要投稿

解释器模式

解释器模式提供了一种评估计算语言语法或表达式的方法,此模式用于SQL解析,符号处理引擎等

实现

创建一个接口Expression并且在具体的类实现这个Expression接口。 定义了一个TerminalExpression类,用作所讨论的上下文的主解释器。 其他的类 - OrExpression和AndExpression用于创建组合表达式

代码

package com.test;

//第1步,创建表达式接口

interface Expression {

public boolean interpret(String context);

}

// 第2步, 创建实现上述接口的具体类

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;

}

}

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);

}

}

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);

}

}

// 第3步,使用Expression类来创建规则,然后解析它们

public class Test {

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 Julise"));

}

// Rule: Robert and John are male

public static Expression getMaleExpression() {

Expression robert = new TerminalExpression("Robert");

Expression john = new TerminalExpression("John");

return new OrExpression(robert, john);

}

// Rule: Julie is a married women

public static Expression getMarriedWomanExpression() {

Expression julie = new TerminalExpression("Julie");

Expression married = new TerminalExpression("Married");

return new AndExpression(julie, married);

}

}

运行结果:

John is male? true

Julie is a married women? false

相关TAG标签
上一篇:jquery两个参数的详解
下一篇:Android线程—Timer类(五)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站