解释模型

一些应用提供了内建的脚本或者宏语言来让用户可以定义它们能够在系统中进行的操作。Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。

Interpreter模式提供了这样一个实现解释器的框架。

Interpreter模式中,提供了TerminalExpressionNonterminalExpression两种表达式的解释方式,Context类用于为解释过程提供一些附加信息。(例如全局的信息)

Context

解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。

AbstractExpression

解释器抽象类

ConcreteExpression

解释器具体实现类。

//
// Created by andrew on 2020/11/29.
//
#include <iostream>using namespace std;class Context {public:explicit Context(int num) {this->m_num = num;}int getNum() const {return m_num;}int getRes() const {return m_res;}void setNum(int num) {this->m_num = num;}void setRes(int res) {this->m_res = res;}private:int m_num;int m_res{};
};class Expression {public:virtual void interpreter(Context *context) = 0;private:Context *m_context{};
};//加法
class PlusExpression : public Expression {public:PlusExpression() {this->context = nullptr;}void interpreter(Context *context) override {int num  = context->getNum();num ++;context->setNum(num);context->setRes(num);}private:Context *context;
};
// 减法
class MinusExpression : public Expression {public:MinusExpression() {this->context = nullptr;}void interpreter(Context * context) override{int num = context->getNum();num --;context->setNum(num);context->setRes(num);}private:Context * context;
};int main(int argc, char *argv[]) {Expression *expression = nullptr;Context  *context = nullptr;Expression * expression2 = nullptr;context = new Context(10);cout << context->getNum() << endl;expression = new PlusExpression;expression->interpreter(context);cout << context->getRes() << endl;   -----------------------------------------------expression2 = new MinusExpression;expression2->interpreter(context);cout << context->getRes() << endl;cout << "interpreter demo" << endl;return 0;
}

23种设计模式C++源码与UML实现--解释模型相关推荐

  1. 23种设计模式C++源码与UML实现--外观模式

    外观模式 facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种,facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面.这个一致的简单的界面被称为fac ...

  2. 23种设计模式C++源码与UML实现--建造者模式

    建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...

  3. 23种设计模式C++源码与UML实现--迭代器模式

    迭代器模式 Iterator模式也叫迭代模式,是行为模式之一,他把对容器种包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 在使用Iterator模式之前,首先应该 ...

  4. 23种设计模式C++源码与UML实现--命令模式

    命令模式 Command模式也叫命令模式,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数. 在面向对象的程序设计中,一个对象调用另外一个对象 ...

  5. 23种设计模式C++源码与UML实现--原型模式

    原型模式 一个复杂对象,具有自我复制功能,统一一套接口. 原型模式主要面对的问题是:某些结构复杂的对象的创建工作,由于需求的变化,这些对象进场面对着剧烈的变化,但是他们却拥有比较一致的接口. 原型模式 ...

  6. 23种设计模式C++源码与UML实现--桥接模式

    桥接模式 Bridge模式,又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为让类承担不同的责任.它的主要特点是把抽象(Abstractio ...

  7. 23种设计模式C++源码与UML实现--单例模式中的饿汉模式和懒汉模式

    单例模式 单例模式是一种对象创建模式,使用单例模式,可以保证为一个类生成唯一的实例对象.也就是说在这个程序空间该类只有一个实例对象. GoF对单例的定义:保证一个类.只有一个实例存在,同时提供对该实例 ...

  8. 23种设计模式C++源码与UML实现--状态模式

    状态模式 State模式也叫状态模式,是行为模式的一种,State模式允许通过改变对象的内部状态而改变对象的行为,这个对象变现的好像修改了它的类一样. 状态模式主要解决的事当控制一个对象状态的条件表达 ...

  9. 23种设计模式C++源码与UML实现--观察者模式

    观察者模式 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同步通信的手段,使得某个对象与 ...

最新文章

  1. layui 表格内容写temple函数_layui表格-template模板的三种用法
  2. 程序员写了段代码,自称完美! 网友: 我现在还在改你的Bug
  3. [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
  4. IDEA 2020.3 连接mysql数据库报错解决
  5. JavaScript 统计中英混合字符串的长度
  6. FTP和TCP、UDP
  7. -拳王虚拟项目公社:虚拟产品自动赚钱技术 小白快速赚到钱的秘方
  8. 【Linux】linux命令iostat
  9. npm突然找不到D:\nodejs\node_modules\npm\bin\npm-cli.js的解决方法
  10. 文件读写: 二进制方式和文本方式的区别
  11. tiff格式转为jpg,tiff转jpg方法
  12. mbedtls | 02 - 伪随机数生成器(ctr_drbg)的配置与使用
  13. 微信小程序公农历转换的实现
  14. mysql查询数据1168_mysql merge报错ERROR 1168
  15. 信息系统开发与管理第一遍总结
  16. 重磅!朱松纯加入北京大学,此前曾传拟加入清华
  17. 全国天气预报查询接口
  18. 公钥基础设施 (Public-key infrastructure PKI)
  19. LabVIEW应用程序在Windows版本之间的字体变化
  20. 韦东山第1期-学习笔记-1

热门文章

  1. Revit二次开发之“创建尺寸标注”
  2. hihocoder 1107 : Shortest Proper Prefix
  3. JSP简单练习-上传文件
  4. NYOJ练习题 又见Alice and Bob
  5. socket/WebSocket/WebService/http/https概念
  6. java程序错误类型及异常处理
  7. golang错误处理(实验楼)
  8. Linux企业级项目实践之网络爬虫(28)——爬虫socket处理
  9. Java语言基础--字符串
  10. 去掉一键还原 开机按k键