GoF23种设计模式之行为型模式之解释器模式
一、概述
? ? ? ??給定一種語言和其文法的一種表示,再定義一個解釋器,該解釋器使用表示來解釋語言中的句子。
二、適用性? ? ? ? ? ? ???
? ? ? ? 當需要解釋一種語言,并且可以將該語言中的句子表示為一個抽象語法樹的時候。
1.該文法簡單對于復雜的文法,文法的類層次變得龐大而無法管理。2.效率不是一個關(guān)鍵問題,最高效的解釋器通常不是通過直接解釋語法分析樹實現(xiàn)的,而是首先將它們轉(zhuǎn)換成另一種形式。
三、參與者
1.AbstractExpression:聲明一個抽象的解釋操作,這個接口為抽象語法樹中所有的節(jié)點所共享。
2.TerminalExpression:?實現(xiàn)與文法中的終結(jié)符相關(guān)聯(lián)的解釋操作。一個句子中的每個終結(jié)符需要該類的一個實例。
3.NonterminalExpression:為文法中的非終結(jié)符實現(xiàn)解釋(Interpret)操作。
4.Context:包含解釋器之外的一些全局信息。
5.Client:構(gòu)建(或被給定)表示該文法定義的語言中一個特定的句子的抽象語法樹。該抽象語法樹由NonterminalExpression和TerminalExpression的實例裝配而成。調(diào)用解釋操作。
四、類圖
五、示例
AbstractExpression
[java]?view plaincopy print?- package?cn.lynn.interpreter;??
- ??
- public?abstract?class?Language?{??
- ??
- ????public?abstract?void?interpret();??
- ??
- }??
- package?cn.lynn.interpreter;??
- ??
- public?class?English?extends?Language?{??
- ??
- ????@Override??
- ????public?void?interpret()?{??
- ????????System.out.println("為網(wǎng)頁添加英文解釋器!");??
- ????}??
- ??
- }??
- package?cn.lynn.interpreter;??
- ??
- public?class?Chinese?extends?Language?{??
- ??
- ????@Override??
- ????public?void?interpret()?{??
- ????????System.out.println("為網(wǎng)頁添加中文解釋器!");??
- ????}??
- ??
- }??
[java]?view plaincopy print?
- package?cn.lynn.interpreter;??
- ??
- import?java.util.ArrayList;??
- import?java.util.List;??
- ??
- public?class?Page?{??
- ??
- ????private?String?content;??
- ??
- ????private?List<Language>?list?=?new?ArrayList<Language>();??
- ??
- ????public?String?getContent()?{??
- ????????return?content;??
- ????}??
- ??
- ????public?void?setContent(String?content)?{??
- ????????this.content?=?content;??
- ????}??
- ??
- ????public?void?addLanguage(Language?lang)?{??
- ????????list.add(lang);??
- ????}??
- ??
- ????public?List<Language>?getLanguages()?{??
- ????????return?list;??
- ????}??
- }??
- package?cn.lynn.interpreter;??
- ??
- public?class?Client?{??
- ??
- ????public?static?void?main(String[]?args)?{??
- ????????Page?page?=?new?Page();??
- ????????page.addLanguage(new?English());??
- ????????page.addLanguage(new?Chinese());??
- ??????????
- ????????for?(Language?lang?:?page.getLanguages())?{??
- ????????????lang.interpret();??
- ????????}??
- ????}??
- ??
- }??
- 為網(wǎng)頁添加英文解釋器!??
- 為網(wǎng)頁添加中文解釋器!??
轉(zhuǎn)載于:https://www.cnblogs.com/huangwentian/p/7471487.html
總結(jié)
以上是生活随笔為你收集整理的GoF23种设计模式之行为型模式之解释器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果爱情可以瞬间忘记是什么歌呢
- 下一篇: BZOJ 2957楼房重建