C#のデザインパターン:解釈モード(通訳・パターン)

、C#のデザインパターン:解釈モード(通訳・パターン)

1アプリケーションのモードを説明するためにのみ、「ビジネス・ルールは頻繁に変更し、同様のパターンが常に文法規則を繰り返し、簡単に質問に抽象化」だけで、適切なインタプリタモード満たすために、難易度のインタプリタモードのアプリケーションである
2、解釈をデザインパターンは、各クラスが独自のルールを持っており、他のビジネス・ルールと競合しない説明しました

第二に、次のコード

使用して、システムを
 使用して; System.Collections.Genericを
 使用して、System.Linqのを
 使用して、System.Textのを、
 使用System.Threading.Tasks; 

名前空間_23解釈モード。
{ 
    ///  <要約> 
    /// インタプリタインタプリタモードアプリケーションであります難易度モードのアプリケーションでは、唯一の「ビジネスルールは頻繁に変更し、同様のパターンが絶えず繰り返され、そして問題のための抽象構文規則に簡単です」満たすために使用インタプリタモードのためにのみ適しています。
    ///   1、希望する言語を解釈する際、及び抽象構文木として文の言語で表現することができ、(正規表現と他のフィールド、XML文書が説明など)インタプリタモードの使用を検討して
     ///   2、繰り返し発生する問題のいくつかは、表現するために、単純な言語とすることができます。
    ///   3、言語の文法は比較的簡単です。
     ///   4、問題は効率の鍵ではなく、主要な関心事インタプリタモード(注考えることができるとき:効果的なインタプリタは通常、抽象構文木の直接的な解釈によって達成されていませんしかし、インタプリタモードの実行効率が高くない使用して、他の形式に変換する必要があります。)
     ///  </要約>
    クラスプログラム
    { 
        静的 ボイドメイン(文字列[]引数)
        { 
            コンテキストコンテキスト = 新しいコンテキスト(usachi )。
            リスト <PeopleInterpreter> interpreterList = 新しいリスト<PeopleInterpreter> ()
                    { 
                        新しい中国語()、
                         新しいUSA()
                    }。
            foreachのVARの項目interpreterList)
            { 
                item.Conversion(コンテキスト)。
            } 
            Console.WriteLineを(context.Get())。
        } 
    } 

    ///  <要約> 
    /// 上下文
     ///  </要約> 
    パブリック クラスコンテキスト
    { 
        プライベート 文字列 _Word = NULL ;
        公共コンテキスト(文字列ワード)
        { 
            この ._Word = 言葉; 
        } 

        公共 ボイド(SET newWord)
        { 
            この ._Word = newWord。
        } 

        パブリック 文字列 get()は
        {
            返す この._Wordを。
        } 
    } 

    ///  <要約> 
    /// 抽象解释器
     ///  </要約> 
    パブリック 抽象 クラスPeopleInterpreter 
    { 
        パブリック 抽象 ボイド変換(コンテキスト・コンテキスト)
    } 
    ///  <要約> 
    /// 中国人业务
     ///  </要約> 
    パブリック クラス中国:PeopleInterpreter 
    { 
        プライベート 静的辞書< 文字文字列 > _Dictionary = 新しいです辞書< 文字文字列 > ();
         ///  <要約> 
        /// 規則の中国の独自の解釈
         ///  </要約> 
        静的中国語()
        { 
            _Dictionary.Add(' U '" アメリカ人" ); 
            _Dictionary.Add(' S '' ナイフとフォーク" ); 
            _Dictionary.Add(' A '" 食べます)。
        } 

        公共 オーバーライド ボイド変換(コンテキストコンテキスト)
        { 
            Console.WriteLineを((_Dictionary.ContainsKey(アイテム))。.GetType()のToString()+ " 业务" )。
            文字列のテキスト= context.Get();
            もし文字列.IsNullOrEmpty(テキスト))
                 のリターン; 
            一覧 < 文字列 > numberList = 新しいリスト< 文字列 > ();
            foreachのVARの項目text.ToLower()てToArray())
            { 
                もし
                { 
                    numberList.Add(_Dictionary [アイテム])。
                } 
                
                { 
                    numberList.Add(item.ToString())。
                } 
            } 
            context.Set(ストリング.Concat(numberList))。
        } 
    } 
    ///  <要約> 
    /// 美国人业务
     ///  </要約> 
    パブリック クラスUSA:PeopleInterpreter 
    { 
        プライベート 静的辞書< 文字文字列 > _Dictionary = 新しい辞書< チャー文字列 > ();
        ///  <要約>
         /// アメリカ人が解釈のルールを所有する
         ///  </要約> 
        静的宇佐()
        { 
            _Dictionary.Add(' C '" 中国の人々" ); 
            _Dictionary.Add(' H '' A ' ); 
            _Dictionary.Add(' I '' )。
        } 

        公共 オーバーライド ボイド変換(コンテキスト・コンテキスト)
        { 
            Console.WriteLineを(。.GetType()のToString()+ " " )。
            文字列のテキスト= context.Get();
            もし文字列.IsNullOrEmpty(テキスト))
                 のリターン; 
            一覧 < 文字列 > numberList = 新しいリスト< 文字列 > ();
            foreachのVARの項目text.ToLower()てToArray())
            { 場合(_Dictionary.ContainsKey(アイテム))
                {ビジネス
                
                    numberList.Add(_Dictionary [アイテム])。
                } 
                
                {
                    numberList.Add(item.ToString())。
                } 
            } 
            context.Set(ストリング.Concat(numberList))。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/May-day/p/11718888.html