设计模式-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 ...
随机推荐
- 关机命令 shutdown
参考资料:[http://jingyan.baidu.com/article/49ad8bce705f3f5834d8faec.html]
- iOS发版出现“No iTunes Connect access for the team”的问题的解决方式
要发个新版本,结果发现,老是提示我“No iTunes Connect access for the team”,出现以下错误: 图1 错误提示: No accounts with iTunes ...
- LeetCode.925-长按的名字(Long Pressed Name)
这是悦乐书的第355次更新,第380篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第217题(顺位题号是925).你的朋友正在键盘上输入他的名字. 有时,在键入字符c时, ...
- Leetcode基础篇30天30题系列之数组:模拟计算法
作者:丁宋涛 数组:加一 题干: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整 ...
- Python中.format()常见的用法
format()格式化输出 format():把传统的%替换为{}来实现格式化输出 format()常见的用法: ') >>>' 其实就是format()后面的内容,填入大括号中 ' ...
- C语言 --- 高级指针
1. 指针赋值: C语言允许使用赋值运算进行指针的赋值,前提是两个指针具有相同的类型. int i,*p,*q; p = &i; ...
- MLS(移动最小二乘)
https://blog.csdn.net/weixin_41484240/article/details/81204113 https://blog.csdn.net/baidu_38127162/ ...
- mysql自增主键字段重排
不带外键模式的 mysql 自增主键字段重排 1.备份表结构 create table table_bak like table_name; 2.备份表数据 insert into table_bak ...
- 一个php文件就可以把数据库的数据导出Excel表格
数据库内容太多,复制粘贴太麻烦?那就用代码实现把,把代码写好了,导出还不容易吗,访问即可导出. excel.php <?php error_reporting(E_ALL ^ E_DEPRECA ...
- thinkphp5服务器部署遇到的问题
candir() has been disabled for security reasons 解决办法: 进入到php的配置目录,编辑php.ini cd /usr/local/php/etcvi ...