From 7336d1f9188195f527bbd1086291c0b696eaab8e Mon Sep 17 00:00:00 2001 From: FengJungle Date: Sat, 2 Nov 2019 22:33:36 +0800 Subject: [PATCH] add Interpreter Pattern --- 16.InterpreterPattern/1.Picture/实例UML图.png | Bin 0 -> 23594 bytes .../1.Picture/解释器模式UML图.png | Bin 0 -> 14219 bytes .../2.Code/InterpreterPattern.h | 129 ++++++++++++++++++ 16.InterpreterPattern/2.Code/main.cpp | 38 ++++++ README.md | 6 +- 5 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 16.InterpreterPattern/1.Picture/实例UML图.png create mode 100644 16.InterpreterPattern/1.Picture/解释器模式UML图.png create mode 100644 16.InterpreterPattern/2.Code/InterpreterPattern.h create mode 100644 16.InterpreterPattern/2.Code/main.cpp diff --git a/16.InterpreterPattern/1.Picture/实例UML图.png b/16.InterpreterPattern/1.Picture/实例UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..765123e6f284727a2d010709b4d7029c3843f239 GIT binary patch literal 23594 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 a)3_C7qP(E>Ymo2#m-{=qzedw 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 NyoHj>lQDSyKLExUN;Cif literal 0 HcmV?d00001 diff --git a/16.InterpreterPattern/2.Code/InterpreterPattern.h b/16.InterpreterPattern/2.Code/InterpreterPattern.h new file mode 100644 index 0000000..dd008ae --- /dev/null +++ b/16.InterpreterPattern/2.Code/InterpreterPattern.h @@ -0,0 +1,129 @@ +#ifndef __COMMAND_PATTERN_H__ +#define __COMMAND_PATTERN_H__ + +#include +using namespace std; + +// ʽ +class AbstractNode +{ +public: + AbstractNode(){} + // ӿ + virtual char interpret() = 0; +}; + +// սʽValueNode +class ValueNode :public AbstractNode +{ +public : + ValueNode(){} + ValueNode(int iValue){ + this->value = iValue; + } + // ʵֽͲ + char interpret(){ + return value; + } +private: + int value; +}; + +// սʽOperationNode +class OperatorNode :public AbstractNode +{ +public: + OperatorNode(){} + OperatorNode(string iOp){ + this->op = iOp; + } + // ʵֽͲ + char interpret(){ + if (op == "and"){ + return '&'; + } + else if (op == "or"){ + return '|'; + } + return 0; + } +private: + string op; +}; + +// սʽSentenceNode +class SentenceNode :public AbstractNode +{ +public: + SentenceNode(){} + SentenceNode(AbstractNode *iLeftNode, + AbstractNode *iRightNode, AbstractNode* iOperatorNode){ + this->leftNode = iLeftNode; + this->rightNode = iRightNode; + this->operatorNode = iOperatorNode; + } + char interpret(){ + if (operatorNode->interpret() == '&'){ + return leftNode->interpret()&rightNode->interpret(); + } + else{ + return leftNode->interpret()|rightNode->interpret(); + } + return 0; + } +private: + AbstractNode *leftNode; + AbstractNode *rightNode; + AbstractNode *operatorNode; +}; + +// +class Handler +{ +public: + Handler(){} + void setInput(string iInput){ + this->input = iInput; + } + void handle(){ + AbstractNode *left = NULL; + AbstractNode *right = NULL; + AbstractNode *op = NULL; + AbstractNode *sentence = NULL; + string iInput = this->input; + vectorinputList; + char* inputCh = const_cast(iInput.c_str()); + char *token = strtok(inputCh, " "); + while (token != NULL){ + inputList.push_back(token); + token = strtok(NULL, " "); + } + for (int i = 0; i < inputList.size() - 2; i += 2){ + left = new ValueNode(*(inputList[i].c_str())); + op = new OperatorNode(inputList[i + 1]); + right = new ValueNode(*(inputList[i+2].c_str())); + sentence = new SentenceNode(left, right, op); + inputList[i + 2] = string(1, sentence->interpret()); + } + string tmpRes = inputList[inputList.size() - 1]; + if (tmpRes == "1"){ + result = 1; + } + else if (tmpRes == "0"){ + result = 0; + } + else{ + result = -1; + } + this->output(); + } + void output(){ + printf("%s = %d\n", input.c_str(), result); + } +private: + string input; + char result; +}; + + +#endif //__COMMAND_PATTERN_H__ \ No newline at end of file diff --git a/16.InterpreterPattern/2.Code/main.cpp b/16.InterpreterPattern/2.Code/main.cpp new file mode 100644 index 0000000..4ea943f --- /dev/null +++ b/16.InterpreterPattern/2.Code/main.cpp @@ -0,0 +1,38 @@ +#include +#include "InterpreterPattern.h" + +int main() +{ + Handler *handler = new Handler(); + + string input_1 = "1 and 1"; + string input_2 = "1 and 0"; + string input_3 = "0 and 1"; + string input_4 = "0 and 0"; + string input_5 = "0 or 0"; + string input_6 = "0 or 1"; + string input_7 = "1 or 0"; + string input_8 = "1 or 1"; + string input_9 = "1 and 0 or 1"; + string input_10 = "0 or 0 and 1"; + string input_11 = "1 or 1 and 1 and 0"; + string input_12 = "0 and 1 and 1 and 1"; + string input_13 = "0 and 1 and 1 and 1 or 1 or 0 and 1"; + handler->setInput(input_1); handler->handle(); + handler->setInput(input_2); handler->handle(); + handler->setInput(input_3); handler->handle(); + handler->setInput(input_4); handler->handle(); + handler->setInput(input_5); handler->handle(); + handler->setInput(input_6); handler->handle(); + handler->setInput(input_7); handler->handle(); + handler->setInput(input_8); handler->handle(); + handler->setInput(input_9); handler->handle(); + handler->setInput(input_10); handler->handle(); + handler->setInput(input_11); handler->handle(); + handler->setInput(input_12); handler->handle(); + handler->setInput(input_13); handler->handle(); + + printf("\n\n"); + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 04e1dbb..12adce3 100644 --- a/README.md +++ b/README.md @@ -73,4 +73,8 @@ Jungle设计模式系列 18.设计模式(十八)——命令模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102810123 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102810123 + +19.设计模式(十九)——解释器模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102864850 \ No newline at end of file