- 浏览: 357774 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (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 216Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 373https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1257https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 436https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 537// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 542https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5338583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 559参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2060基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 8681 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1530OpenSSL命令---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 1840ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 827转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1829转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1013C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 938转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 946转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 769参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1547转自 http://blog.csdn.net/weixinh ...
相关推荐
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一个语言的文法,并解析语言中的表达式。具体来说,解释器模式通过定义一个解释器来解释语言中的表达式,从而实现对语言的解析和执行。 在解释...
设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
java 设计模式 java 设计模式是软件工程的基石,它们被反复使用、多数人知晓的、经过...* 解释器模式:解释器模式是一种行为型模式,它可以将对象之间的关系建立在解释者的基础上,以便于更好地实现对象之间的关系。
5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—...
5.3 interpreter(解释器)—类行为型 模式 162 5.4 iterator(迭代器)—对象行为型 模式 171 5.5 mediator(中介者)—对象行为型 模式 181 5.6 memento(备忘录)—对象行为型 模式 188 5.7 observer...
行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...
第6章阐释行为模式(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者模式);第7章针对所有设计模式向初学者提供一些提示;第8章包括常见的面试问题及实际示例;第9章涵盖Java...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计...
将不同的功能代码解耦桥接模式装饰器模式适配器模式外观模式组合模式享元模式行为型模式(更新中...)作用:将不同的行为代码解耦观察者模式模板方法模式策略模式职责链模式状态模式迭代器模式访问者模式备忘录模式...
行为类型模式,共十种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式。 设计模式的六大原则 开闭原则(Open Close Principle)...
继承子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式GitHub托管请读者点击明星进行关注并支持!在线阅读目录关注我对于一个开发者而言,能够胜任系统中任意一个模块的开发是...
设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造...行为型模式37 1.3.1 责任链模式37 1.3.2 命令模式40 1.3.3 解释器模式43 1.3.4 迭代器模式45 1.3.5 中介者模式49 1.3.6 备忘录模式52 1.3.7 ...
解释器模式 写在前面: UML图解 继承和实现是比较容易理解的两种类关系。在架构设计中,要注意组合、聚合和 依赖这三者的区别。 组合在 语中的含义是把若干个独立部分组成整体 各个部分都有其 立的使用 价值和生命...
百度地图开发java源码 ...解释器模式(Interpreter) 3.4 迭代器模式(Iterator) 3.5 中介者模式(Mediator) 3.6 备忘录模式(Memento) 3.7 观察者模式(Observer) 3.8 状态模式(State) 3.9 策略模式(Stra
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式之UML 类图以及类间关系(泛化 、实现、依赖...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片...