zoukankan      html  css  js  c++  java
  • 设计模式复习-解释器模式

    #pragma once
    #include "stdafx.h"
    #include<map>
    #include<set>
    #include<list>
    #include<string>
    #include<iostream>
    using namespace std;
    
    /*
    	设计模式-解释器模式(interpreter)
    	给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表示为一个简单语言中的句子。
    这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题(比如正则表达式)。
    */
    
    class CContext {//解释器之外的一些全局信息
    public:
    	string mstrInput;
    	CContext(const string &strInput) {
    		mstrInput = strInput;
    	}
    };
    
    class CAbstractExpression {//抽象解释操作
    public:
    	virtual void Interpret(CContext *pContext) = 0;
    };
    
    class ExpressionA : public CAbstractExpression {//表达式A
    public:
    	void Interpret(CContext *pContext) {
    		cout << "ExpressionA:" << pContext->mstrInput << endl;
    	}
    };
    
    class ExpressionB : public CAbstractExpression {//表达式B
    public:
    	void Interpret(CContext *pContext) {
    		cout << "ExpressionB:" << pContext->mstrInput << endl;
    	}
    };
    
    int main() {
    
    	list<CAbstractExpression*>lstWork;
    	lstWork.clear();
    	lstWork.push_back(new ExpressionA());
    	lstWork.push_back(new ExpressionB());
    	lstWork.push_back(new ExpressionA());
    	lstWork.push_back(new ExpressionB());
    
    	CContext *pContext = new CContext("test");
    	for each(CAbstractExpression * index in lstWork) {
    		index->Interpret(pContext);
    		delete index;
    	}
    	delete pContext;
    	getchar();
    	return 0;
    }

  • 相关阅读:
    js——正则整理
    纯css改变select默认样式
    CSS3——瀑布流,多列(Multi-column)
    angularjs + ionic 实现项目的按需加载
    jquery的deferred对象
    Nginx 配置反向代理
    docker部署vue项目总结
    模糊查询json数组
    LocalStorage存储JSON对象、存储数组
    iview中遇到table的坑(已经修改了table的数据,但是界面没有更新)
  • 原文地址:https://www.cnblogs.com/csnd/p/12061904.html
Copyright © 2011-2022 走看看