<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **定義:**解釋器模式(Interpreter Pattern)給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 **類型:**類行為型模式 概述: ?????????正如GoF所介紹的,解釋器模式的應用場合比較窄。解釋器模式在《Head First Design Pagtterns》中也被列為非常用模式。解釋器模式雖然說更多應用在某種語言上,但是解釋器的原理還是可以應用在其他場合的。 ??????????解釋器模式與組合模式有很大的相似性。正如GoF所言,在最寬泛的概念下,幾乎每個使用復合模式的系統也都使用了解釋器模式。解釋器模式與組合模式的不同主要體現在,解釋器模式中的幾個解釋器類都有相同的接口,而組合模式則是直接聚合幾個沒有關聯的類。 ?????????解釋器模式雖說多用于某種解釋語言上,但是其思想還是可以應用在其它方面的。解釋器模式作為類行為模式,其主要是通過將一組平行操作的行為抽象出來作為獨立的類存在。以達到降低類調用的耦合以及更方便地添加新的解釋操作。這里舉一個比較簡單示例,有一段文字內容,需要用幾個解釋器來識別其中的地名,人名。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b466e8279.jpg) ![](image/d41d8cd98f00b204e9800998ecf8427e.jpg) 參與者: 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設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看