定义:解释器模式(Interpreter Pattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
类型:类行为型模式
概述:
正如GoF所介绍的,解释器模式的应用场合比较窄。解释器模式在《Head First Design Pagtterns》中也被列为非常用模式。解释器模式虽然说更多应用在某种语言上,但是解释器的原理还是可以应用在其他场合的。
解释器模式与组合模式有很大的相似性。正如GoF所言,在最宽泛的概念下,几乎每个使用复合模式的系统也都使用了解释器模式。解释器模式与组合模式的不同主要体现在,解释器模式中的几个解释器类都有相同的接口,而组合模式则是直接聚合几个没有关联的类。
解释器模式虽说多用于某种解释语言上,但是其思想还是可以应用在其它方面的。解释器模式作为类行为模式,其主要是通过将一组平行操作的行为抽象出来作为独立的类存在。以达到降低类调用的耦合以及更方便地添加新的解释操作。这里举一个比较简单示例,有一段文字内容,需要用几个解释器来识别其中的地名,人名。
类图:
参与者:
示例代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Interpreter
{
class Context
{
private string input;
public string Input
{
get { return input; }
set { input = value; }
}
private string output;
public string Output
{
get { return output; }
set { output = value; }
}
}
abstract class AbstractExpression
{
public abstract void Interpret(Context context);
}
class NameExpression : AbstractExpression
{
public override void Interpret(Context context)
{
Console.WriteLine("名字解释器");
}
}
class AddressExpression : AbstractExpression
{
public override void Interpret(Context context)
{
Console.WriteLine("地址解释器");
}
}
class Program
{
static void Main(string[] args)
{
Context context = new Context();
IList<AbstractExpression> list = new List<AbstractExpression>();
list.Add(new NameExpression());
list.Add(new AddressExpression());
foreach (AbstractExpression exp in list)
{
exp.Interpret(context);
}
}
}
}
适用性:
优缺点:
参考资料:
原文:http://blog.csdn.net/feihe0755/article/details/19505159