设计模式-Interpreter(行为模式) 使用解释器给用户提供一个一门定义语言的语法表示的解释器,通过该解释器解释语言中的句子。
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码
//Context.h
#pragma once class Context
{
public:
Context();
~Context();
protected:
private:
};
//Context.cpp
#include"Context.h"
Context::Context(){}
Context::~Context(){}
//Interpret.h
#include"Context.h"
#include<string> class AbstractExpression{
public:
virtual ~AbstractExpression();
virtual void Interpret(const Context& c);
protected:
AbstractExpression();
private:
}; class TerminalExpression :public AbstractExpression
{
public:
TerminalExpression(const std::string& statement);
~TerminalExpression();
void Interpret(const Context&c);
protected:
private:
std::string _statement;
}; class NonterminalExpression :public AbstractExpression
{
public:
NonterminalExpression(AbstractExpression* expression, int times);
~NonterminalExpression();
void Interpret(const Context& c);
protected:
private:
AbstractExpression* _expression;
int _times;
};
//Interpret.cpp
#include"Interpret.h"
#include"Context.h"
#include<iostream> AbstractExpression::AbstractExpression(){}
AbstractExpression::~AbstractExpression(){}
void AbstractExpression::Interpret(const Context&c)
{ }
TerminalExpression::TerminalExpression(const std::string &statement)
{
this->_statement = statement;
}
TerminalExpression::~TerminalExpression(){} void TerminalExpression::Interpret(const Context& c)
{
std::cout << this->_statement << "TerminalExpression" << std::endl;
} NonterminalExpression::NonterminalExpression(AbstractExpression* expression, int times)
{
this->_expression = expression;
this->_times = times;
} NonterminalExpression::~NonterminalExpression(){} void NonterminalExpression::Interpret(const Context& c)
{
for (int i = ; i < _times; ++i)
{
this->_expression->Interpret(c);
}
}
//main.cpp
#include"Context.h"
#include"Interpret.h"
#include<iostream>
#include<string>
int main(int args, char* argv)
{
Context* c = new Context();
AbstractExpression* te = new TerminalExpression("Hello");
AbstractExpression* nte = new NonterminalExpression(te, );
nte->Interpret(*c);
getchar();
return ;
}
设计模式-Interpreter(行为模式) 使用解释器给用户提供一个一门定义语言的语法表示的解释器,通过该解释器解释语言中的句子。的更多相关文章
- 题目:给定一数组 例如:a = [1,2,3,5,2,1] 现用户提供一个数字 请返回用户所提供的数字的所有下标
def test(ary): ds = {} for i in range(len(ary)): if ds.get(ary[i]): ds[ary[i]].append(i) else: ds[ar ...
- 设计模式---领域规则模式之解析器模式(Interpreter)
前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter ...
- C#设计模式(13)——代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
- python设计模式之工厂模式
一.理解工厂模式 在面向对象编程中,术语“工厂”表示一个负责创建替他类型对象的类.通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法.客户端使用某些参数调用此方法,之后,工厂会据此创建所需类 ...
- C#设计模式之代理模式(一)
原文地址:http://blog.csdn.net/lovelion/article/details/8227953 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时 ...
- python 设计模式之门面模式
facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程. 一个门面可以看作是为大段代码提供简单接口的对象,就像类库. 门面模式被归入建筑设计模式.门面模式隐藏系统内部的细 ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...
- python设计模式之命令模式
python设计模式之命令模式 现在多数应用都有撤销操作.虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作.撤销操作是在1974年引入的,但Fortran和Lisp分别早在1957年和195 ...
随机推荐
- cocos2dx[3.2](7) 核心类Director/Scene/Layer/Sprite
[核心类] 导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步: cocos2dx基础篇(2) 第一个程序 导演控制场景,场景控制图层,图层控制精灵,精灵控制动作. ...
- python学习之模块-模块(二)
5.2 序列化模块 将一种数据结构转换成一种特殊的序列(字符串或bytes)的过程就叫序列化.这个特殊的序列还可以通过命令反解回原来的数据类型. python中有三种序列化的功能模块: json模 ...
- LeetCode.977-排序数组的平方(Squares of a Sorted Array)
这是悦乐书的第369次更新,第397篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第231题(顺位题号是977).给定一个整数数组A按有序递增顺序排序,返回每个数字的平方, ...
- #Java学习之路——基础阶段二(第十三篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- docker搭建环境的时候常用的命令有哪些
1.docker搭建环境的时候常用的命令有哪些 docker如果要删除镜像,现在停止container docker ps 查询正在运行的镜像docker stop +containerid停止后再删 ...
- PMP项目正常估算时间
最佳时间段+正常时间段*+最差时间段)/=正常估算时间. 项目经理小李对某活动工期进行估算时,发现人员的熟练程度和设备供应是否及时对工期至关重要.如果形成最有利组合时,预计17天可以完成:如果形成最不 ...
- day 14 装饰器
装饰器:装饰,装修,房子就可以住,如果装修,不影响你住,而且体验更加,让你生活中增加了很多功能:洗澡,看电视,沙发.器:工具.开放封闭原则:开放:对代码的拓展开放的, 更新地图,加新枪,等等.封闭:对 ...
- a页面通过url传值,b页面如何接收(jquery.params.js实现)
用于两个html页面之间的传值 我的应用场景是:用echarts在a页面做完中国地图后,点击某个省份在b页面显示某个省份的地图.(在b页面显示点击了的那个省份的地图,等于说b页面是个“容器”页) 假设 ...
- sql server 平方根函数SQRT(x)
--SQRT(x)返回非负数x的二次方根 示例:select SQRT(9), SQRT(36); 结果:3 6
- npm学习(七)之如何发布包、更新发布包、删除发布包
前言 我们经常使用npm来下载别人的模块或者说包,那么我们如何将自己写的模块上传到npm呢? 了解npm政策 在开始之前,最好回顾一下npm的政策,以防您对站点礼仪.命名.许可或其他指导原则有疑问. ...