日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

GoF23种设计模式之行为型模式之解释器模式

發(fā)布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GoF23种设计模式之行为型模式之解释器模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概述

? ? ? ??給定一種語言和其文法的一種表示,再定義一個解釋器,該解釋器使用表示來解釋語言中的句子。

二、適用性? ? ? ? ? ? ???

? ? ? ? 當需要解釋一種語言,并且可以將該語言中的句子表示為一個抽象語法樹的時候。

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?
  1. package?cn.lynn.interpreter;??
  2. ??
  3. public?abstract?class?Language?{??
  4. ??
  5. ????public?abstract?void?interpret();??
  6. ??
  7. }??
Expression [java]?view plaincopy print?
  1. package?cn.lynn.interpreter;??
  2. ??
  3. public?class?English?extends?Language?{??
  4. ??
  5. ????@Override??
  6. ????public?void?interpret()?{??
  7. ????????System.out.println("為網(wǎng)頁添加英文解釋器!");??
  8. ????}??
  9. ??
  10. }??
[java]?view plaincopy print?
  1. package?cn.lynn.interpreter;??
  2. ??
  3. public?class?Chinese?extends?Language?{??
  4. ??
  5. ????@Override??
  6. ????public?void?interpret()?{??
  7. ????????System.out.println("為網(wǎng)頁添加中文解釋器!");??
  8. ????}??
  9. ??
  10. }??
Context
[java]?view plaincopy print?
  1. package?cn.lynn.interpreter;??
  2. ??
  3. import?java.util.ArrayList;??
  4. import?java.util.List;??
  5. ??
  6. public?class?Page?{??
  7. ??
  8. ????private?String?content;??
  9. ??
  10. ????private?List<Language>?list?=?new?ArrayList<Language>();??
  11. ??
  12. ????public?String?getContent()?{??
  13. ????????return?content;??
  14. ????}??
  15. ??
  16. ????public?void?setContent(String?content)?{??
  17. ????????this.content?=?content;??
  18. ????}??
  19. ??
  20. ????public?void?addLanguage(Language?lang)?{??
  21. ????????list.add(lang);??
  22. ????}??
  23. ??
  24. ????public?List<Language>?getLanguages()?{??
  25. ????????return?list;??
  26. ????}??
  27. }??
Client [java]?view plaincopy print?
  1. package?cn.lynn.interpreter;??
  2. ??
  3. public?class?Client?{??
  4. ??
  5. ????public?static?void?main(String[]?args)?{??
  6. ????????Page?page?=?new?Page();??
  7. ????????page.addLanguage(new?English());??
  8. ????????page.addLanguage(new?Chinese());??
  9. ??????????
  10. ????????for?(Language?lang?:?page.getLanguages())?{??
  11. ????????????lang.interpret();??
  12. ????????}??
  13. ????}??
  14. ??
  15. }??
Result [java]?view plaincopy print?
  1. 為網(wǎng)頁添加英文解釋器!??
  2. 為網(wǎng)頁添加中文解釋器!??

轉(zhuǎn)載于:https://www.cnblogs.com/huangwentian/p/7471487.html

總結(jié)

以上是生活随笔為你收集整理的GoF23种设计模式之行为型模式之解释器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。