1.Interpreter模式的目的就是提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。

2.Interpreter模式结构图

3.实现

 #ifndef _CONTEXT_H_
#define _CONTEXT_H_ class Context
{
public:
Context();
~Context();
protected:
private:
}; #endif

Context.h

 #include "Context.h"

 Context::Context()
{ }
Context::~Context()
{ }

Context.cpp

 #ifndef _INTERPRET_H_
#define _INTERPRET_H_ #include "Context.h"
#include <string>
using namespace std; class AbstractExpression
{
public:
virtual ~AbstractExpression();
virtual void Interpret(const Context& c); protected:
AbstractExpression();
private:
}; class TerminalExpression:public AbstractExpression
{
public:
TerminalExpression(const string& statement);
~ TerminalExpression();
void Interpret(const Context& c); protected:
private:
string _statement;
}; class NonterminalExpression:public AbstractExpression
{
public:
NonterminalExpression(AbstractExpression* expression,int times);
~ NonterminalExpression();
void Interpret(const Context& c);
protected:
private:
AbstractExpression* _expression;
int _times;
}; #endif

Interpret.h

 #include "Interpret.h"
#include <iostream>
using namespace std; AbstractExpression::AbstractExpression()
{ }
AbstractExpression::~AbstractExpression()
{ }
void AbstractExpression::Interpret(const Context& c)
{ }
TerminalExpression::TerminalExpression(const string& statement)
{
this->_statement = statement;
}
TerminalExpression::~TerminalExpression()
{ }
void TerminalExpression::Interpret(const Context& c)
{
cout<<this->_statement<<" TerminalExpression"<<endl;
}
NonterminalExpression::NonterminalExpression(AbstractExpression* expression,int times)
{
this->_expression = expression;
this->_times = times;
}
NonterminalExpression::~NonterminalExpression()
{ }
void NonterminalExpression::Interpret(const Context& c)
{
for (int i = ; i < _times ; i++)
{
this->_expression->Interpret(c);
}
}

Interpret.cpp

 #include "Context.h"
#include "Interpret.h"
#include <iostream>
using namespace std; int main(int argc,char* argv[])
{
Context* c = new Context();
AbstractExpression* te = new TerminalExpression("hello");
AbstractExpression* nte = new NonterminalExpression(te,);
nte->Interpret(*c); return ;
}

main.cpp

Interpreter Pattern的更多相关文章

  1. 深入浅出设计模式——解释器模式(Interpreter Pattern)

    模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题.解释器模式描述了如何构成一个 ...

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

    原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作 ...

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

    原文 第19章 解释器模式(Interpreter Pattern) 解释器模式 导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲 ...

  4. C#设计模式之二十三解释器模式(Interpreter Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第十一个模式,也是面向对象设计模式的最后一个模式,先要说明一下,其实这个模式不是最后一个模式(按Gof的排序来讲),为什么把它放在最 ...

  5. 17.解释器模式(Interpreter Pattern)

    17.解释器模式(Interpreter Pattern)

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

    解释器模式(Interpreter Pattern) 介绍给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例有一个Message实体类,某个类对它的 ...

  7. 【设计模式】行为型11解释器模式(Interpreter Pattern)

      解释器模式(Interpreter Pattern) 解释器模式应用场景比较小,也没有固定的DEMO,中心思想就是自定义解释器用来解释固定的对象. 定义:给定一个语言,定义它的文法表示,并定义一个 ...

  8. php解释器模式( interpreter pattern)

    ... <?php /* The interpreter pattern specifies how to evaluate language grammar or expressions. W ...

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

    一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易 ...

  10. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

随机推荐

  1. Nginx没有启动文件、nginx服务不支持chkconfig、nginx无法自启

    Nginx没有启动文件.nginx服务不支持chkconfig.nginx无法自启 问题描述: Nginx安装后,当想要设置Ngixn为开机启动时, 就需要把nginx的启动命令路径放到/etc/rc ...

  2. OS | monolithic kernel & microkernel

    A monolithic kernel is a kernel where all services (file system, VFS, device drivers, etc) as well a ...

  3. ros pub sub ("~")

    base_velocity_smoother.cpp                        remap ("~")    订阅: "cmd_vel"   ...

  4. CF997D

    分析: 假设在第一个树上我们有一个长度为x的环,在第二树上我们有一个长度为y的环,那么可以在叉积树上构造出$\binom{x+y}{x}$个长度为x+y的环 问题的关键就变成了如何统计出在一个树上的长 ...

  5. Java中判断String对象是否为空的方法

    Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...

  6. 【IntelliJ IDEA】idea显示工具栏

    idea显示工具栏 在view->勾选对应按钮即可

  7. 【报错】项目启动部署时报错:java.lang.NoSuchMethodError

    报错: ================================================================================================ ...

  8. xamarin.IOS App闪退日志----crash

    一.查找日志文件位置:通过xcode/windows/device/你的IPhone/crash 二.拿到日志可以直接查看,但是日志记录太乱看不懂,需要转换处理,查找.DSYM文件,文件位置:/Use ...

  9. 修改ViewPager调用setCurrentItem时,滑屏的速度 ,解决滑动之间切换动画难看

    在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个 ...

  10. DICOM医学图像处理:深入剖析Orthanc的SQLite,了解WADO & RESTful API

    背景: 上一篇博文简单翻译了Orthanc官网给出的CodeProject上“利用Orthanc Plugin SDK开发WADO插件”的博文,其中提到了Orthanc从0.8.0版本之后支持快速查询 ...