デザインパターン21のインタープリターモード

バックグラウンド

ソフトウェア開発では、いくつかの類似した機能が複数回出現する場合があり、これらの機能には特定の類似点と規則性があります。これが私たちがそれを簡単な言語に要約する方法です。これがインタプリタパターンのソースです。

上記の説明は雲と霧の中にありますか?例を挙げましょう。式の入力、パラメータの入力を必要とし、正しい結果を返す関数を開発したいと考えています。たとえば、次のパラメータを入力します。

a=2;b=4;c=10

次に、次の式を入力します。

a+b-c

出力結果:-4。

別の式を入力してみましょう:

a * b / c

出力結果:0.8。

この機能を開発する場合、どうしますか?通訳モードを使用すると、良い結果が得られます。

インタプリタモードとは

「「

言語を指定して、その文法の表現を、その表現を使用してその言語の文を解釈するインタプリタとともに定義します。この表現を使用して、その言語の文を解釈します。)

インタプリタモードは、主に次の5つの要素で構成されています。

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

  • ターミナル式の役割:これは、文法のターミナルに関連する操作を実装するために使用される抽象式のサブクラスです。文法の各ターミナルには、それに対応する特定のターミナル式があります。

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

  • コンテキストロール:通常、各インタープリターに必要なデータまたは共通の機能が含まれ、通常、すべてのインタープリターが共有するデータを転送するために使用され、後続のインタープリターはここからこれらの値を取得できます。

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

構造図は次のとおりです。

通訳モード

コード

コードがどのように実装されているかを見てみましょう。

環境

public class Context {
    private AbstractExpression exp;

    public Context() {
        //数据初始化
    }

    public void operation(String info) {
        //调用相关表达式类的解释方法
    }
}

AbstractExpression

public interface AbstractExpression {
    Object interpret(String info);    //解释方法
}

TerminalExpression

public class TerminalExpression implements AbstractExpression{
    @Override
    public Object interpret(String info) {
        System.out.println("进入终结符表达式的处理逻辑");
        return null;
    }
}

NonterminalExpression

public class NonterminalExpression implements AbstractExpression {
    private AbstractExpression exp1;
    private AbstractExpression exp2;
    @Override
    public Object interpret(String info) {
        System.out.println("进入非终结表达式的逻辑");
        return null;
    }
}

通訳モードは比較的めったに使用されないモードだからです。上記のテンプレートが提供されているので、このモードの使用方法を考えることができます。

通訳モードについて考える

通訳モードには効率の問題があることが多く、メンテナンスの複雑さが増します。記事の冒頭の質問と同様に、Javaで数式パーサー式Expression4J、MESP(Math Expression String Parser)、およびJepを使用できます。いくつかの複雑な表現を説明できます。元の通訳モードよりも簡単に使用できます。

過去におすすめ

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

おすすめ

転載: blog.csdn.net/wujialv/article/details/110038130