12.解释器模式

1解释器模式具体描述

解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,

并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。

在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。

在解释器模式中需要定义一个代表文法的命令类的等级结构,

也就是一系列的组合规则。每一个命令对象都有一个解释方法,

代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

 

俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、

去看电影的方法等等,跟MM约会时,只要做一个Interpreter,

照着上面的脚本执行就可以了。

4.观察者模式类图

5.代码:

#include<iostream>

#include
<list>

#include
<string>

using
namespace
std;

//解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,

//并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

//解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。

//在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。

//在解释器模式中需要定义一个代表文法的命令类的等级结构,

//也就是一系列的组合规则。每一个命令对象都有一个解释方法,

//代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

//

//俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、

//去看电影的方法等等,跟MM约会时,只要做一个Interpreter,

//照着上面的脚本执行就可以了。

 

class
Context;

 

class
AbstractExpression

{

public:

   
virtual
void
interpret(Context
*) = 0;

};

 

class
TerminalExpression :public
AbstractExpression

{

public:

   
void
interpret(Context
*context)

   
{

       
cout <<
"终端解释器"
<< endl;

   
}

};

 

class
NonterminalExpression :public
AbstractExpression

{

public:

   
void
interpret(Context
*context)

   
{

       
cout <<
"非终端解释器"
<< endl;

   
}

};

 

class
Context

{

public:

   
string
input,
output;

};

 

int
main()

{

   
Context *context
= new
Context();

   
list<AbstractExpression*> 
lt;

   
lt.push_back(new
TerminalExpression());

   
lt.push_back(new
NonterminalExpression());

   
lt.push_back(new
TerminalExpression());

   
lt.push_back(new
TerminalExpression());

 

   
for (list<AbstractExpression*>::iterator
iter =
lt.begin();
iter !=
lt.end();
iter++)

   
{

       
(*iter)->interpret(context);

   
}

 

   
cin.get();

   
return 0;

}

运行结果如下:



时间: 2024-09-22 23:02:53

12.解释器模式的相关文章

第19章 解释器模式(Interpreter Pattern)

原文 第19章 解释器模式(Interpreter Pattern) 解释器模式        导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲看了半天的描述跟解释,可能是本人的水平有限,或者是耐心太差,看到一半就有点扛不住了.我感觉对于一个菜鸟或者是没接触过设计模式的人来说,在看设计模式的时候更希望作者能简短的用几行代码来描述设计模式,这样起码看完大体有个概念.           概述:          Interpre

PHP设计模式之解释器模式

解释器: 解释器设计模式用于分析一个实体的关键元素,并且针对每个元素都提供自己的解释或相应的动作. 解释器设计模式最常用于PHP/HTML 模板系统. <?php        class User {            protected $_username = "";            public function __construct($username) {                $this->_username = $username;  

.Net设计模式实例之解释器模式(Interpreter Pattern)

一.解释器模式简介(Brief Introduction) 解释器模式(Interpreter Pattern),给定一个语言,定义它的文法的一种表示,并定 义一个解释器,这个解释器使用该表示来解释语言中的句子.使用了解释器模式,可以很容 易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文 法.也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容 易直接编写. 二.解决的问题(What To Solve) 如果一种特定类型的问题发生的频率足够

Java设计模式编程之解释器模式的简单讲解_java

0.解释器(Interpreter)模式定义 :给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子. 属于行为型模式. 解释器模式在实际的系统开发中使用的非常少,因为它会引起效率.性能以及维护等问题. 解释器模式的通用类图如图所示. 1.解释器模式的优点 解释器是一个简单语法分析工具,它最显著的优点就是扩展性,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了. 2.解释器模式的缺点 解释器模式会引起类膨胀:每个语法

20、Python与设计模式--解释器模式

一.模拟吉他 要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果.除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了.分析其需求,整个过程大致上分可以分为两部分:根据规则翻译谱的内容:根据翻译的内容演奏.我们用一个解释器模型来完成这个功能. class PlayContext(): play_text = None class Expression(): def interpret(self, context): if len(context.play_text) ==

《C++面向对象高效编程(第2版)》——3.12 参数传递模式——客户的角度

3.12 参数传递模式--客户的角度 C++面向对象高效编程(第2版) 在设计类的接口时,要声明类的成员函数,并指定它们的参数.类的客户调用成员函数时,提供实参(如果有的话). 每种方法都应清楚地指明参数的传递模式,参数可以按值.按引用或按指针传递.与const联合使用,参数会更加安全可靠.函数的原型用于向客户传达这些信息. 每个参数的传递模式都给客户传达特定的含义.再者,有时还需遵循一些经长时间验证确实行之有效的规则.因此,为参数选择合适的类型非常重要.在接下来的内容中,我们将介绍参数传递的不

乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)

原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作者:webabcd 介绍 给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例 有一个Message实体类,某个类对它的操作有Get()方法.现在要求用具有某一规则的中文语法来执行这个操作. MessageModel using System;usin

Java设计模式(二十三)----解释器模式

解释器模式 定义:解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 解释器模式的结构 下面就以一个示意性的系统为例,讨论解释器模式的结构.系统的结构图如下所示: 模式所涉及的角色如下所示: (1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口.这个接口主要是一个interpret()方法,称做解释操作. (2)终结符表达式(Terminal Expre

解析Java的设计模式编程之解释器模式的运用_java

定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子.类型:行为类模式类图: 解释器模式是一个比较少用的模式,本人之前也没有用过这个模式.下面我们就来一起看一下解释器模式.  解释器模式的结构抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作.具体解释任务由它的各个实现类来完成,具体的解释器分别由终结符解释器TerminalExpression和非终结符解释器Nontermina