解释器模式
给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来 解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象 都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。
它使用自身的定义来解释某个事物中某个特征或者符号,以区别与其它的特征或者符号。解释器模式就是,把事物高频率的特征和符号都通过解释器来解释,并加以组合处理。
俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只 要做一个Interpreter,照着上面的脚本执行就可以了。
#include <iostream>
using namespace std;
class Context{
public:
Context(int num){
this->num = num;
}
void setNum(int num) {
this->num = num;
}
int getNum() {
return num;
}
void setRes(int res) {
this->res = res;
}
int getRes() {
return res;
}
private:
int num;
int res;
};
class Expression{
public:
virtual ~Expression() {}
virtual void interpreter(Context* context) = 0;
private:
Context *context;
};
class PlusExpression : public Expression{
public:
virtual void interpreter(Context* context) {
int num = context->getNum();
num++;
context->setNum(num);
context->setRes(num);
}
};
class MinusExpression : public Expression{
public:
virtual void interpreter(Context* context) {
int num = context->getNum();
num--;
context->setNum(num);
context->setRes(num);
}
};
int main()
{
Expression *ex = NULL;
Context *ct = NULL;
ct = new Context(10);
std::cout << ct->getNum() << std::endl;
ex = new PlusExpression();
ex->interpreter(ct);
std::cout << ct->getNum() << std::endl;
std::cout << ct->getRes() << std::endl;
ex = new MinusExpression();
ex->interpreter(ct);
std::cout << ct->getNum() << std::endl;
std::cout << ct->getRes() << std::endl;
delete ex;
delete ct;
return 0;
}