Java23デザインパターン-23。動作パターンのインタープリターパターン

Javaの設計原則に加えて、23の設計パターンもあります。

これらのパターンは前任者によって少しずつ蓄積され、改善され、最適化されており、これらのデザインパターンはいくつかの特定の問題を解決することができます。

そして、これらのモードでは、言語の使用が完全に反映されていると言えます。

それでは  、今日行動モードでの  インタプリタモードを学びます    !

通訳モード

まず、インタプリタモードとは何かを見てみましょう。

百科事典を通して、何もないことがわかります。ここでは、通訳モードと呼ばれるものと、このモードが主に使用される目的について説明します。

このモードでは、主に同一または類似の単語や文字を使用します。これらの文字や単語について説明してから、操作します。

インタプリタモードの定義と特徴

インタープリターモードの定義:分析オブジェクトの言語を定義し、言語の文法表現を定義してから、その言語の文を解釈するパーサーを設計します。つまり、コンパイルされた言語を使用して、アプリケーションの例を分析します。このモードは、特定のコンテキストを解釈する文法式処理のインターフェイスを実装します。

ここで言及されている文法と文の概念は、コンパイルの原則の説明と同じです。「文法」は言語の文法規則を指し、「文」は言語セットの要素です。たとえば、中国語の文章はたくさんありますが、「私は中国語です」もそのひとつです。文法ツリーを使って、中国語で直感的に文章を書くことができます。

インタプリタモードは動作に似たモードであり、その主な利点は次のとおりです。

1.優れたスケーラビリティ。クラスはインタープリターモードで言語の文法規則を表すために使用されるため、継承などのメカニズムを介して文法を変更または拡張できます。

2.実装が簡単です。構文ツリーの各式ノードクラスは類似しているため、文法の実装が簡単です。


インタープリターモードの主な欠点は次のとおりです。

1.実行効率が低い。インタプリタモードは通常、多数のループと再帰呼び出しを使用します。説明する文が複雑になると、実行速度が非常に遅くなり、コードのデバッグプロセスも面倒になります。

2.クラスの拡張が発生します。インタプリタモードの各ルールは、少なくとも1つのクラスを定義する必要があります。文法ルールが多いと、クラスの数が急激に増加し、システムの管理と保守が困難になります。

3.適用可能なシナリオが少なくなります。ソフトウェア開発では、言語文法を定義する必要のあるアプリケーション例が非常に少ないため、このモードが使用されることはめったにありません。

インタプリタパターンの構造と実現

このモデルについてもう1つ言いたいことがあります。それは、文法です。

文法

文法は、言語の文法構造を記述するために使用される正式な規則です。ルールのないルールはありません。たとえば、完全な愛のルールは「お互いに魅力的で、ひたむきな愛情で、どちらの当事者にも愛の経験がない」と考える人もいます。最後のルールは厳しいですが、ルールが必要です。機械語であろうと自然言語であろうと、独自の文法規則があります。

〈句子〉::=〈主语〉〈谓语〉〈宾语〉
〈主语〉::=〈代词〉|〈名词〉
〈谓语〉::=〈动词〉
〈宾语〉::=〈代词〉|〈名词〉
〈代词〉你|我|他
〈名词〉7大学生I筱霞I英语
〈动词〉::=是|学习

文法を少し簡単に見てから、文字を見てみましょう。

1.抽象表現の役割:インタープリターのインターフェースを定義し、インタープリターの解釈操作に同意し、主に解釈メソッドinterpret()を含みます。

2.終端記号の役割:これは抽象式のサブクラスであり、文法の終端記号に関連する操作を実装するために使用されます。文法の各終端記号には、それに対応する特定の終端記号があります。

3.非終端記号式の役割:これは抽象式のサブクラスでもあり、文法の非終端記号に関連する操作を実装するために使用されます。文法の各規則は、非終端記号式に対応します。

4.環境の役割:通常、各通訳者が必要とするデータまたは共通の機能が含まれています。通常、すべての通訳者が共有するデータを転送するために使用されます。後の通訳者は、ここからこれらの値を取得できます。

5.クライアント:主なタスクは、分析が必要な文または式をインタプリタオブジェクトによって記述された抽象構文ツリーに変換してから、インタプリタの解釈メソッドを呼び出すことです。もちろん、インタプリタの解釈メソッドは次のことができます。また、環境ロールを介して間接的にアクセスされます。

 

簡単な例を見てみましょう。銀行預金の利息を計算するだけです。

最初の一歩:

まず、抽象表現の役割を定義しましょう

これは主に、渡した文字列が対応する式の条件を満たしているかどうかを判断するために使用されます

2番目のステップ:

ターミネーター式の役割を作成し、抽象式の役割を実装します

ここでは、判断したい文字を格納し、Setコレクションに格納して、データの一意性を保証し、判断を繰り返さないようにする必要があります。実装方法は、主に存在するかどうかを判断します。

3番目のステップ:

非終端表現の役割を作成し、抽象表現の役割も実装します

ここでは、その時点での端末式のエンティティクラスを渡し、それらがすべてSetコレクションに存在するかどうかを判断します。すべて存在する場合は、テキストを説明できることを意味します。

4番目のステップ:

環境を作る

ここで数式を定義する必要があります。もちろん、複数の数式が必要です。複数の数式がある場合は、複数の配列を記述します。

 式は非終端文字式の役割です。これにより、現在渡されている式が一致するかどうかを検出できます。一致する場合は、元本、金利、乗算の時間を取得し、出力します。

テスト:

テストするテストクラスを取得しましょう

出力する

ご覧のとおり、計算結果に問題はありません。

 

OK、それだけです、みんなよく見てください。たくさん練習してください。ご不明な点がございましたら、お問い合わせくださいQQ:2100363119

これがデザインパターンの最後のパターンです。デザインパターンをもっと見ていただきたいと思います。正直なところ、インタビュー中にJavaデザインパターンに習熟していれば、コードは悪くないと思います。

最後に、私の個人的なウェブサイトを訪問するすべての人を歓迎します:lemon1234.comメッセージを残していただきありがとうございます

おすすめ

転載: blog.csdn.net/weixin_45908370/article/details/109696919