Java設計モードテンプレート方法(Template)原理解析


この文章は主にJavaデザインモードテンプレートの方法(Template)の原理解析を紹介しています。ここでは例示コードによって紹介された非常に詳細で、皆さんの学習や仕事に対して一定の参考学習価値を持っています。必要な友達は参考にしてください。
前言:
私達は開発の中で多くの固定的な流れがあります。例えば、JDBCで接続を取得したり、接続をオフにしたりといった流れは固定的です。変動するのはパラメータだけです。解析結果集はこれらは各エンティティのオブジェクトによって「調整します。」固定されていないステップ湊がある場合は、テンプレートメソッドモードが誕生します。
テンプレート方法パターン(Template)定義:
テンプレートの方法モードはまたテンプレートモードと呼ばれ、父親の種類が複数のステップを定義したアルゴリズムの骨格を指しています。その多くのステップ湊は父の種類で実現されたもので、あるステップ湊は異なるサブクラスによって実現されるもので、これらの「不確定」の実現ステップを抽象的な方法としてサブクラスに提出して実現します。テンプレートモードのコアは、サブクラスがアルゴリズム構造を変えないようにする場合、アルゴリズムのいくつかのステップ湊を再定義することである。行動型デザインモードに属します。応用はとても広くて、たとえばMybatisの中のBaseExectorです。Spring中のJdbcTemplate;Spring統合Hbernateの中のHibernature Template、Springは各種MqのTemplateを集めて、MongodbTemplateなどがあります。
モードのキャラ:
抽象クラス:テンプレート方法を実現し、アルゴリズムの骨格を定義しました。
具体的なクラス:抽象的なクラスの抽象的なリリースを実現し、親の定義のアルゴリズムをより完全にします。
コードの実装:
1:抽象的なクラスでプロセスを定義します。例えば、毎日出勤する時にプロセスがあります。起動します。コードを書きます。全体のプロセスで起動とシャットダウンは同じです。コードを書くだけのこのステップは違います。javaプログラマはjavaコードを書きます。PhpプログラマはPhpコードを書きます。私たちはまず抽象的な父親でこの流れを定義します。

public abstract class Work {

  //        
  public void workDay(){

    //1:    
    openComputer();
    //2:  :   
    coding();
    //3:         closeComputer();
  }

  //  
  private final void openComputer() {
    System.out.println("    ,  ");
  }

  //   
  protected abstract void coding();

  //  
  private final void closeComputer() {
    System.out.println("  ,  ");
  }

}
2:具体的に実現する
Javaプログラマー

public class JavaProgrammer extends Work {
  
  @Override
  protected void coding() {
    System.out.println("Java     Idea, Java  。。。");
  }
}
PHPプログラマ

public class PhpProgrammer extends Work {

  @Override
  protected void coding() {
    System.out.println("PHP     Zend Studio, Php  。。。");
  }
}
3:使用

public class TemplateMethodDemo {

  public static void main(String[] args) {
    Work javaProgrammer = new JavaProgrammer();
    javaProgrammer.workDay();
    System.out.println("================");
    Work phpProgrammer = new PhpProgrammer();
    phpProgrammer.workDay();
  }
}
実行結果

テンプレートパターンはソースコードに反映されます。
1:私達は毎日使うHttpServletの中のservice方法で、serviceの方法の中で呼び出しの流れを定義しました。クライアントの呼び出しの方式によって、if elseの論理判断は違った方法を呼び出します。例えば、doGet、doPost、doDeleteなど、retsful呼び出しを実現します。

2:Mybatisフレームワークにもいくつかの古典的な実用性があります。例えば、BaseExectorクラスはSQLベースの実行クラスです。大部分のSQLの実行ロジックを実現し、いくつかの方法をサブクラスの定化完成に教えます。ソースは以下の通りです。


その中のdoUpdate()、doFlaush Sttements()、doQuery()、DQuery Curor()などの方法はすべてサブクラスで実現されますが、BaseExectorにはどのようなサブクラスがありますか?彼の類図を見に来ます。

私たちは具体的な各サブクラスの異なる実現を見に行ってもいいです。
テンプレートモードの長所と短所:
利点:
1:テンプレートモードを利用して、同じ処理ロジックのコードを抽象的な親類に入れることができ、コードの多重性が向上しました。
2:異なる論理を異なるサブクラスに入れ、サブクラスの拡張によって新しい挙動を増加させ、コードの拡張性を向上させました。
3:不変の行為を親に書いて、サブクラスの重複コードを除いて、良いコード多重プラットフォームを提供して、開閉原則に適合します。
4:会社の高級エンジニアまたは構築師はプロジェクトの前期にテンプレートパターンを利用してプロセスを定義し、他のコードエンジニアに具体的な実現をさせることができます。
短所:
1:各抽象類は少なくとも一つのサブクラスで実現され、クラス数の増加をもたらします。
2:クラス数の増加は間接的にシステムの複雑性を増加させます。
3:継承関係の自身の欠点のため、もし父方に新しい抽象的な方法を加えるならば、もとから子類があってすべて一回実現します。
コードリンク:https://gitee.com/ganganbobo/gps-parent
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。