Design Pattern Interpreter 解析者模式

解析者本身是一个很大的设计模式,重点在于设计这个解析者本身,但是由于解析者本身很难设计,故此完善的解析者模式比较少应用,但是这个设计模式本身的思想却不难。

下面简单实用C++实现一下解析者模式,使用不同的解析者,那么就会对于同样的内容解析出不同的结果。

#include <stdio.h>
#include <string>
using namespace std;

class Context
{
public:
	string cmd;
	void setContext(string s)
	{
		cmd = s;
	}
};

class InterpreterBase
{
protected:
	Context *context;
public:
	InterpreterBase(Context *c) : context(c) {}
	//不在后面写=0会出现无法解析外部命令错误的virtual void interpret();
	virtual void interpret() = 0;
};

class InterpreterIncre:public InterpreterBase
{
public:
	InterpreterIncre(Context *c) : InterpreterBase(c) {}
	void interpret()
	{
		string cmd = context->cmd;
		for (int i = 0; i < (int)cmd.size(); i++)
		{
			putchar(cmd[i]+1);
		}
		putchar('\n');
	}
};

class InterpreterDecre:public InterpreterBase
{
public:
	InterpreterDecre(Context *c) : InterpreterBase(c) {}
	void interpret()
	{
		string cmd = context->cmd;
		for (int i = 0; i < (int)cmd.size(); i++)
		{
			putchar(cmd[i]-1);
		}
		putchar('\n');
	}
};

int main()
{
	Context context;
	context.setContext("ABCDEFG");
	InterpreterDecre decre(&context);
	InterpreterIncre incre(&context);

	decre.interpret();
	incre.interpret();

	return 0;
}

运行结果对同一个字符串ABCDEFG,使用不同的解析者得到不同的结果:

可以说C\C++编译器就是利用这个设计模式写出来的。完善实现这样的解析器当然是很难的。

Design Pattern Interpreter 解析者模式

时间: 2024-08-05 07:04:32

Design Pattern Interpreter 解析者模式的相关文章

Design Pattern Singleton 单一模式

单一模式的几个注意点: 一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类. 二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的. 三) 这个唯一的类必须是要静态的 程序: #ifndef _SINGLETON_H #define _SINGLETON_H #include <iostream> #include <string> using namespace std; class DuGuJiuJian {

Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式 这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 <Head First Desgin Pattern>的原版书,顺便做下笔记,把里面提到的每个模式通过回忆的方式画出来复习并记下来总结下学习成果=.= 关于设计模式 使用设计模式是为了增强程序的复用性,拓展性,易维护性. 设计模式会增加程序代码的复杂度,并不是所有情况都必须使用设计模式,需要根据需求以及经验评估使用场景. 学习并掌握

Head First Design Pattern 读书笔记(3)装饰者模式

Head First Design Pattern 读书笔记(3) Decorator Pattern 装饰者模式 Decorator Pattern 类图 定义 装饰者模式:通过让组件类与装饰者类实现相同的接口,装饰类可以在不修改原有组件类的情况下,动态拓展组件类的新功能,并且可以无限拓展下去. 几个OO的原测 类应该对修改关闭,对拓展开放.–>"开闭原则",即尽量不要修改已经在用的类,而通过继承的方式去拓展类的新功能. 设计类时应当尽量考虑不修改原有的代码.–>同&qu

Design Pattern Visitor 访问者模式

访问者模式,就是我们已经有一系列的对象了,那么就可以使用一个visitor对象一次性遍历所有的对象,就好像这个visitor访问了所有这些对象一样,所以就叫访问者模式. 实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类. 下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类. #include <stdio.h> #include <iostream> #include <string>

Design Pattern Chain of Reponsibility 责任链模式

本程序实现一个责任链模式查询人名的资料. 开始都是查询第一个人,问其是否有某人的资料,如果有就返回结果,如果没有第一个人就会询问第二个人,第二个人的行为和第一个人的行为一致的,然后一致传递下去,直到找到答案,或者是最后没有资料,返回. 首先创建一个基类: //base class class Person { public: virtual void getInfo(string name) = 0; }; 第一个人的类: 主要行为函数是getInfor,就是一个if else判断,这里使用ma

Design Pattern 设计模式 Decorator 装饰者模式

1 设计一个基类 2 继承这个基类,并包含这个基类的一个对象 3 创建继承类的时候,初始化这个基类,因为是基类指针,所以可以是所有基类的衍生类对象,那么就可以叠加任意多个衍生类对象了. 关键是在衍生类中包含一个基类对象,然后有了继承和包含两重关系,可以使得一个类一个类对象叠加,达到装饰目的. 等于是创建了一个对象指针链表,一个一个对象发挥其相应的作用. 下面程序装饰一个桌子,同时包含释放内存的处理. 关键要知道基类的析构函数必须使用虚函数,为什么? 1 如果基类不是析构函数,那么如果衍生类中包含

Mediator Design Pattern 中介者模式

就是设计一个Mediator类,可以处理其他类的关系. Mediator类: 1 拥有其他所有类的实例对象 2 设置一个接口供其他类使用,其他类也拥有一个Mediator类成员,只需调用这个Mediator接口函数使用,无需自己处理关系. 3 Mediator内部已经设置好各个类的关系了,其他类只要直接使用Mediator处理关系就可以了. 下面是一个聊天室聊天是处理关系的实例程序: 进入聊天室的人只需要选定和谁聊天就可以了,无需担心这些信息是如何传递的,这个已经由Mediator自动处理了.

设计模式---领域规则模式之解析器模式(Interpreter)

前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter 一:解释器模式Interpreter (一)概念 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户定义他们能够在系统中进行的操作.Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过解释器来解释语言中的句子.Interpreter模式

[Design Pattern] Command Pattern 命令模式

发现公司的代码好像有用到 Command Pattern,回顾重温下. Command Pattern 的类图结构如下: 参考 <Head First Design Patterns(英文版)>P245 绘制 我所理解的 Command Pattern 如图. caller, action, subject 分别对于类图中的 Invoker, Command, Receiver, 他们都可以由使用者 Client 进行配置 参考资料: Head First Design Pattern. 推荐