、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))。 } } }