**定義:**解釋器模式(Interpreter Pattern)給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
**類型:**類行為型模式
概述:
?????????正如GoF所介紹的,解釋器模式的應用場合比較窄。解釋器模式在《Head First Design Pagtterns》中也被列為非常用模式。解釋器模式雖然說更多應用在某種語言上,但是解釋器的原理還是可以應用在其他場合的。
??????????解釋器模式與組合模式有很大的相似性。正如GoF所言,在最寬泛的概念下,幾乎每個使用復合模式的系統也都使用了解釋器模式。解釋器模式與組合模式的不同主要體現在,解釋器模式中的幾個解釋器類都有相同的接口,而組合模式則是直接聚合幾個沒有關聯的類。
?????????解釋器模式雖說多用于某種解釋語言上,但是其思想還是可以應用在其它方面的。解釋器模式作為類行為模式,其主要是通過將一組平行操作的行為抽象出來作為獨立的類存在。以達到降低類調用的耦合以及更方便地添加新的解釋操作。這里舉一個比較簡單示例,有一段文字內容,需要用幾個解釋器來識別其中的地名,人名。
類圖:


參與者:
1. Client,構建Context,以及完成解釋器的調用操作。
1. Context,需要被解釋的文件內容。
1. Expression,抽象類,提供接口。
1. NameExpression、AddressExpression,實現接口的具有解釋操作。???????????
示例代碼:
~~~
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);
}
}
}
}
~~~
適用性:
1. 該文法簡單對于復雜的文法,文法的類層次變得龐大而無法管理。
1. 效率不是一個關鍵問題最高效的解釋器通常不是通過直接解釋語法分析樹實現的,而是首先將它們轉換成另一種形式。
優缺點:
1. 優點,能夠靈活添加新的操作類。
1. 缺點,使用范圍過于狹窄。
參考資料:
1. 《設計模式——可復用面向對象軟件基礎》
1. 《大話設計模式》
1. 《Head?First設計模式》
- 前言
- 設計模式六大原則
- 1——創建型模式之簡單工廠模式
- 2——創建型模式之工廠方法模式
- 3——創建型模式之抽象工廠模式
- 4——創建型模式之單例模式
- 5——創建型模式之建造者模式
- 6——創建型模式之原型模式
- 7——結構型模式之適配器模式
- 8——結構型模式之橋接模式
- 9——結構型模式之組合模式
- 10——結構型模式之裝飾者模式
- 11——結構型模式之外觀模式
- 12——結構型模式之享元模式
- 13——結構型模式之代理模式
- 14——行為型模式之職責鏈模式
- 15——行為型模式之命令模式
- 16——行為型模式之解釋器模式
- 17——行為型模式之迭代器模式
- 18——行為型模式之中介者模式
- 19——行為型模式之備忘錄模式
- 20——行為型模式之觀察者模式
- 21——行為型模式之狀態模式
- 22——行為型模式之策略模式
- 23——行為型模式之模板方法模型
- 24——行為型模式之訪問者模式
- 設計模式總結