23种设计模式之(二十二)解释器模式(python_c++实现)

23种设计模式之(二十二)解释器模式(Interpreter)

本文主要介绍23种设计模式之解释器模式,附详细python/c++示例代码。

  • 概念
  • 应用场景
  • 注意事项
  • 代码示例
  • 总结
  • 代码链接

解释器模式(Interpreter)

概念

解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

GoF对解释器模式的定义是:给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。

应用场景

(1)、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。

(2)、一些重复出现的问题可以用一种简单的语言来进行表达。

(3)、一个简单语法需要解释的场景。

C++代码示例

/************************************************************************/
/* 设计模式专题
/*
/* 解释器模式
/*
/* Author  : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date    : 20180918
/************************************************************************/

#include <iostream>

class Context
{
public:
	Context(int num)
	{
		this->m_num = num;
	}
	int getNum()
	{
		return m_num;
	}
	int getRes()
	{
		return m_res;
	}

	void setNum(int num)
	{
		this->m_num = num;
	}
	void  setRes(int res)
	{
		this->m_res = res;
	}

private:
	int m_num;
	int m_res;
};

class Expression
{
public:
	virtual void  interpreter(Context *context) = 0;	
};

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);
	}

};



void main()
{

	Expression		*expression = NULL;
	Context			*context = NULL;

	Expression		*expression2 = NULL;

	context = new Context(10);

	printf("%d\n",context->getNum());
	expression = new PlusExpression;
	expression->interpreter(context);

	printf("%d\n",context->getRes());
	expression2 = new MinusExpression;
	expression2->interpreter(context);
	printf("%d\n",context->getRes());

}

python代码示例

# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
# 
# 解释器模式
# 
# Author  : zzl
# 
# 编程环境: window10 python2.7
# 
# Date    : 20180918
##################################################################

class Context(object):
    def __init__(self, num):
        self.m_num = num
        self.m_res = num

    def get_num(self):
        return self.m_num

    def get_res(self):
        return self.m_res


class Expression(object):
    def interpreter(self, context):
        pass


class PlusExpression(Expression):
    def interpreter(self, context):
        context.m_num = context.m_num + 1
        context.m_res = context.m_num


class MinusExpression(Expression):
    def interpreter(self, context):
        context.m_num = context.m_num - 1
        context.m_res = context.m_num


if __name__ == "__main__":
    context = Context(10)

    print(context.m_num)
    expression = PlusExpression()
    expression.interpreter(context)

    print(context.m_res)
    expression2 = MinusExpression()
    expression2.interpreter(context)
    print(context.m_res)


源码链接

设计模式(二十二)解释模式示例代码(python–c++)

猜你喜欢

转载自blog.csdn.net/zzl_python/article/details/82763397
今日推荐