[设计模式-行为型]解释器模式(Interpreter)

一句话

看起来是用来解释一种语言的文法。(类似不同的解释器子类解释不同的字符)

和编译器类似的解释器, 实际状况可能使用的比较少。

概括

解析

INTERPRETER—俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本执行就可以了。
  解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

实例

包含的文件有:

一个解释器的抽象类 (Expression.java)

一个上下文的类, 这个上下文类中有解释器类的列表(Context.java)

两个解释器的子类(Type1Expression.java ; Type2Expression.java)

通过不同的解释器,把相应的语言做一些转换。

测试类 TestMain.java

/**
 * @author oscar999
 * @date 2015-1-6
 * @version V1.0
 */
package designptn.interpreter;

public abstract class Expression {
	abstract void interpret(Context ctx);
}

/**
 * @author oscar999
 * @date 2015-1-6
 * @version V1.0
 */
package designptn.interpreter;

import java.util.ArrayList;
import java.util.List;

public class Context {
	private String context;
	private List<Expression> list = new ArrayList<Expression>();

	public void setContent(String content) {
		this.context = content;
	}

	public String getContent() {
		return this.context;
	}

	public void add(Expression eps) {
		list.add(eps);
	}

	public List<Expression> getList() {
		return list;
	}
}

/**
 * @author oscar999
 * @date 2015-1-6
 * @version V1.0
 */
package designptn.interpreter;

public class Type1Expression extends Expression {

	void interpret(Context ctx) {
		// TODO Auto-generated method stub
		System.out.println("Interpret Type1 content!");
	}

}

/**
 * @author oscar999
 * @date 2015-1-6
 * @version V1.0
 */
package designptn.interpreter;

public class Type2Expression extends Expression {

	void interpret(Context ctx) {
		// TODO Auto-generated method stub
		System.out.println("Interpret Type2 content!");
	}

}

/**
 * @author oscar999
 * @date 2015-1-6
 * @version V1.0
 */
package designptn.interpreter;

/**
 * @author Administrator
 *
 */
public class TestMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Context ctx = new Context();
		ctx.add(new Type1Expression());
		ctx.add(new Type2Expression());

		for(Expression eps : ctx.getList())
		{
			eps.interpret(ctx);
		}
	}

}
时间: 2024-11-10 14:13:53

[设计模式-行为型]解释器模式(Interpreter)的相关文章

解释器模式 Interpreter 行为型 设计模式(十九)

解释器模式(Interpreter) 考虑上图中计算器的例子 设计可以用于计算加减运算(简单起见,省略乘除),你会怎么做? 你可能会定义一个工具类,工具类中有N多静态方法 比如定义了两个方法用于计算a+b 和 a+b-c public static int add(int a,int b){ return a+b; } public static int add(int a,int b,int c){ return a+b-c; } 但是很明显,如果形式有限,那么可以针对对应的形式进行编程 如果

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

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

C#设计模式:解释器模式(Interpreter Pattern)

一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语法规则的问题”才适合使用解释器模式2,解释器设计模式每个解释的类有自己的规则,并且与其他业务规则不冲突 二,如下代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; u

二十四种设计模式:解释器模式(Interpreter Pattern)

解释器模式(Interpreter Pattern) 介绍给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例有一个Message实体类,某个类对它的操作有Get()方法.现在要求用具有某一规则的中文语法来执行这个操作. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Interpreter { //

Java进阶篇设计模式之九----- 解释器模式和迭代器模式

前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern). 解释器模式 简介 解释器模式顾名思义,就是对某事物进行解释.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 解释器模式

大话设计模式Python实现-解释器模式

解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式--解释器模式 8 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种

设计模式(行为型)之解释器模式(Interpreter Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之访问者模式(Visitor Pattern)>http://blog.csdn.net/yanbober/article/details/45536787 概述 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个

行为型设计模式之解释器模式(Interpreter)

结构 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 适用性 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式.而当存在以下情况时该模式效果最好: 该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理.此时语法分析程序生成器这样的工具是更好的选择.它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间. 效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现

[设计模式] 解释器模式 Interpreter

在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子.这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题. 就如上面说的那个游戏,我输入up walk 5,我必须按照:移动方向+移动方式+移动距离这种格式输入我的指令,而这种格式的指令就是一种文法,只有按照了我定义的