- 浏览: 369883 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
头文件
//InterpreterPattern.h #ifndef INTERPRETER_PATTERN_H #define INTERPRETER_PATTERN_H #include <Windows.h> #include <iostream> #include <map> #include <string> using namespace std; namespace InterpreterPattern { ////////////////////////////////////////////////////////////////////////// class Context { private: map<string, int> m_cValueMap; public: void addValue(string key,int value); int getValue(string key); }; ////////////////////////////////////////////////////////////////////////// class AbstractExpression { public : virtual int interpreter(Context context) = 0; }; ////////////////////////////////////////////////////////////////////////// class AddNonterminalExpression : public AbstractExpression { private : AbstractExpression* m_pLeft; AbstractExpression* m_pRight; public: AddNonterminalExpression(AbstractExpression* pLeft, AbstractExpression* pRight); int interpreter(Context cContext); }; ////////////////////////////////////////////////////////////////////////// class SubtractNonterminalExpression : public AbstractExpression { private : AbstractExpression* m_pLeft; AbstractExpression* m_pRight; public: SubtractNonterminalExpression(AbstractExpression* pLeft, AbstractExpression* pRight); int interpreter(Context cContext); }; ////////////////////////////////////////////////////////////////////////// class TerminalExpression : public AbstractExpression { private : int i; public : TerminalExpression(int i); int interpreter(Context cContext); }; ////////////////////////////////////////////////////////////////////////// void InterpreterPattern_Test(); } #endif
实现
#include "InterpreterPattern.h" namespace InterpreterPattern { ////////////////////////////////////////////////////////////////////////// void Context::addValue(string key,int value) { m_cValueMap.insert(std::pair<string,int>(key,value)); } int Context::getValue(string key) { return m_cValueMap[key]; } ////////////////////////////////////////////////////////////////////////// AddNonterminalExpression::AddNonterminalExpression(AbstractExpression* pLeft, AbstractExpression* pRight) { this->m_pLeft = pLeft; this->m_pRight = pRight; } int AddNonterminalExpression::interpreter(Context cContext) { return this->m_pLeft->interpreter(cContext) + this->m_pRight->interpreter(cContext); } ////////////////////////////////////////////////////////////////////////// SubtractNonterminalExpression::SubtractNonterminalExpression(AbstractExpression* pLeft, AbstractExpression* pRight) { this->m_pLeft = pLeft; this->m_pRight = pRight; } int SubtractNonterminalExpression::interpreter(Context cContext) { return this->m_pLeft->interpreter(cContext) - this->m_pRight->interpreter(cContext); } ////////////////////////////////////////////////////////////////////////// TerminalExpression::TerminalExpression(int i) { this->i = i; } int TerminalExpression::interpreter(Context cContext) { return this->i; } ////////////////////////////////////////////////////////////////////////// void InterpreterPattern_Test() { //a-b+c Context cContext; cContext.addValue("a", 7); cContext.addValue("b", 8); cContext.addValue("c", 2); SubtractNonterminalExpression* pSubtractValue = new SubtractNonterminalExpression(new TerminalExpression( cContext.getValue("a")), new TerminalExpression(cContext.getValue("b"))); AddNonterminalExpression* pAddValue = new AddNonterminalExpression(pSubtractValue, new TerminalExpression( cContext.getValue("c"))); cout<< pAddValue->interpreter(cContext); } }
客户端
#include "InterpreterPattern.h" #include <iostream> using namespace std; using namespace InterpreterPattern; void main() { InterpreterPattern_Test(); }
运行结果
- Diagram.zip (710.9 KB)
- 下载次数: 0
- Diagram-raw.zip (97.5 KB)
- 下载次数: 0
- InterpreterPattern.zip (1.2 KB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
11. **解释器模式**:定义一个语言的文法,并提供一个解释器来处理这个文法。 设计模式的使用可以提高代码的可读性、可维护性和可扩展性,是软件工程中的重要工具。理解和熟练应用设计模式,可以帮助开发者解决常见...
解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并允许你使用该表示来解释语言中的句子。在C#中,解释器模式常用于构建自定义的编程语言或者解析特定格式的数据,例如配置文件、表达式计算等。 ...
解释器模式是一种行为型设计模式,主要用于处理语言的文法规则、算术规则等问题。它通过定义语言的文法,并根据该文法来解释句子,使得我们可以用统一的方式处理各种语言结构。本文将通过具体的例子——加减运算来...
根据GOF(GoF,设计模式:可复用面向对象软件的基础)的设计原则,解释器模式是一种行为设计模式,用于创建能解析特定语言的解释器。在这个模式中,每个语言的表达式都会被表示为一个类,而这些类共同构成了一个语法...
解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并实现一个解释器用于解析这种语法的语句。这种模式通常用于小型、特定领域的语言(DSL)实现,比如配置文件、简单的脚本或计算表达式。在计算机...
使用解释器模式的一个例子是在文本编辑器中实现自定义的脚本语言,用户可以编写简单的脚本来控制编辑器的行为。解释器则负责解析这些脚本并执行相应的操作。 在实际开发中,解释器模式的优点包括: 1. **灵活性**:...
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
在上述内容中,提到了七种行为型设计模式,分别是责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式。 1. **责任链模式**:责任链模式的核心是建立一个对象链,每个对象都有处理请求的能力,...
**解释器模式**是一种行为设计模式,它提供了一种方式来表示语言的语法,并通过类和对象解析这种语法。在编程领域,解释器模式常用于创建简单的语言或表达式解析器,例如配置文件、计算器应用或者SQL查询的简化版本...
解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一个语言的文法,并解析语言中的表达式。具体来说,解释器模式通过定义一个解释器来解释语言中的表达式,从而实现对语言的解析和执行。 在解释...
3. 解释器模式(Interpreter):解释器模式提供了一种方式来表示语言的语法,并允许动态解析给定的表达式。它常用于构建简单的语言解释器或者表达式求值。 4. 迭代器模式(Iterator):迭代器模式提供了一种顺序...
9. **解释器模式**:解释器模式为语言的文法提供了一个解析器,常用于小型语言的实现。Python的语法解析库如`pyparsing`和`ply`可以帮助实现这个模式。 10. **状态模式**:状态模式允许对象在内部状态改变时改变它...
解释器模式是一种行为型设计模式,它定义一个新的语言的文法,并且建立一个解释器来解释该语言中的句子。这里的“语言”是指使用规定格式和语法的代码。 **应用场景:** 当一个语言需要解释执行,且这个语言的文法...
首先,我们要了解行为型模式分为两大类:责任链模式、解释器模式、迭代器模式、命令模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式以及访问者模式。这些模式各有特点,解决不同的设计问题。 例如...
**解释器模式**是一种行为设计模式,它提供了一种方式来表示语言或表达式的语法,并通过解析这些语法来执行相关操作。在iOS开发中,解释器模式常常用于处理简单的脚本或表达式,例如在运行时计算数学表达式、解析...
解释器模式是一种行为设计模式,它提供了一种方式来表示一种特定的语言,并创建一个解释器来解析这种语言的句子。在计算机科学中,解释器模式常用于构建小型的自定义语言,如计算器应用中的表达式解析。 在介绍解释...