解釋器模式-設計模式系列


   導讀:解釋器模式,平常用的比較的少,所以在寫這個模式之前在博客園搜索了一番,看完之后那叫一個頭大。篇幅很長,我鼓足了勁看了半天的描述跟解釋,可能是本人的水平有限,或者是耐心太差,看到一半就有點扛不住了。我感覺對於一個菜鳥或者是沒接觸過設計模式的人來說,在看設計模式的時候更希望作者能簡短的用幾行代碼來描述設計模式,這樣起碼看完大體有個概念。

    

     概述:

 

       Interpreter模式也叫解釋器模式,是由GoF提出的23種設計模式中的一種。Interpreter是行為模式之一,它是一種特殊的設計模式,它建立一個解釋器,對於特定的計算機程序設計語言,用來解釋預先定義的文法。

 

     結構圖:

 

 

 代碼舉例(我已經最簡單化了,一看即懂)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  /// <summary>
     /// 解釋器上下文環境類。用來存儲解釋器的上下文環境,比如需要解釋的文法等。
     /// </summary>
     class  Context
     {
         private  int  sum;
         public  int  Sum
         {
             get  return  sum; }
             set  { sum=value;}
         }
     
     }
     /// <summary>
     /// 解釋器抽象類。
     /// </summary>
    abstract  class  AbstractExpreesion
     {
         public  abstract  void  Interpret(Context context);
       
     
     }
     /// <summary>
     ///   解釋器具體實現類。自加
     /// </summary>
     class  PlusExpression : AbstractExpreesion
     {
         public  override  void  Interpret(Context context)
         {
             int  sum = context.Sum;
             sum++;
             context.Sum = sum;
 
         }
     }
     /// <summary>
     ///   解釋器具體實現類。 自減
     /// </summary>
     class  MinusExpression : AbstractExpreesion
     {
         public  override  void  Interpret(Context context)
         {
             int  sum = context.Sum;
             sum--;
             context.Sum = sum;
 
         }
     }

客戶端調用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     class  Program
     {
         static  void  Main( string [] args)
         {
             Context context =  new  Context();
             context.Sum = 10;
             List<AbstractExpreesion> list =  new  List<AbstractExpreesion>();
             //運行加法三次
             list.Add( new  PlusExpression());
             list.Add( new  PlusExpression());
             list.Add( new  PlusExpression());
             //運行減法兩次
             list.Add( new  MinusExpression());
             list.Add( new  MinusExpression());
             for  ( int  i = 0; i < list.Count(); i++)
             {
                 AbstractExpreesion expression = list[i];
                 expression.Interpret(context);
             }
             Console.WriteLine(context.Sum);
             Console.ReadLine();
             //得出結果為11
         }
     }

  看完之后,是不是覺得很簡單,無非是設定幾個公式,然后統一進行執行。最終得到結果!設計模式代表的是一種思想,至於怎么千變萬化就看大家的了

 

      適用場景:

 

        1.當有一個語言需要解釋執行,並且你可將該語言中的句子表示為一個抽象語法樹,可以使用解釋器模式。而當存在以下情況時該模式效果最好

        2.該文法的類層次結構變得龐大而無法管理。此時語法分析程序生成器這樣的工具是最好的選擇。他們無需構建抽象語法樹即可解釋表達式,這樣可以節省空間而且還可能節省時間。

        3.效率不是一個關鍵問題,最高效的解釋器通常不是通過直接解釋語法分析樹實現的,而是首先將他們裝換成另一種形式,例如,正則表達式通常被裝換成狀態機,即使在這種情況下,轉換器仍可用解釋器模式實現,該模式仍是有用的

 

         設計模式系列文章入口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM