意味:
操作でアルゴリズムを定義するためのフレームワーク、サブクラスへのいくつかのステップを遅らせます。これにより、サブクラスはアルゴリズムの構造を変更せずにアルゴリズムの特定の特定のステップを再定義できます。
それは非常にハイエンドに聞こえます、私の理解:
1.親クラスは、いくつかの抽象的なメソッド(基本方法)といくつかの特定の方法(テンプレートメソッド)を宣言します
2。抽象的なメソッドは、サブクラスに実装されるアルゴリズム(プロセス)のステップです
3.テンプレートメソッドは、アルゴリズム(プロセス)フレームワークです。親クラスでは、基本的な方法への呼び出しを実装し、固定ロジックを完全に実装することが合意されています。
4.アルゴリズムの構造(プロセス)は親クラスで定義され、特定の実装の詳細はサブクラスに実装されます。
注:悪意のある操作を防ぐために、一般的なテンプレート法が最終的に追加され、書き換えは禁止されています。
一般クラス図:
実際、テンプレート法は、プログラミングで頻繁に使用されるパターンです。まず例を見てみましょう。ある日、プログラマーAはタスクを手に入れました。整数の配列を与え、配列の数値を小から大部分に並べ替えてから、ソートされた結果を印刷します。分析後、このタスクは、ソートと印刷の2つの部分にほぼ分割できます。印刷機能は簡単に実装できるため、ソートは少し面倒です。しかし、Aには方法があり、最初に印刷機能を完了し、ソート機能を実行する他の誰かを見つけます。
抽象クラスAbstractSort { / *** Arrayを小さいから大部分から並べ替える* @param Array* / Protected Abstract void sort(int [] array); public void shosurtresult(int [] array){this.sort(array); System.out.print( "sort result:"); for(int i = 0; i <array.length; i ++){system.out.printf( "%3s"、array [i]); }}}執筆後、卒業して仕事を始めたばかりの同僚を見つけて言った。タスクがある、私はすでに主要なロジックを書いているので、残りのロジックを実装できる。そこで、私はabstractSortクラスをBに渡し、それを実装するためにBを書き込ませました。 Bはそれを引き継いで見ました。簡単すぎました。 10分で行われました。コードは次のとおりです。
class ConcreTesort extends AbstractSort {@Override Protected void sort(int [] array){for(int i = 0; i <array.length-1; i ++){selectsort(array、i); }} private void selectsort(int [] array、int index){int minvalue = 32767; // min値変数ind indexmin = 0; // min値インデックス変数int temp; //(int i = index; i <array.length; i ++){if(array [i] <minvalue){//最小値minvalue = array [i]; //最小値を保存indexmin = i; }} temp = array [index]; // 2つの数値array [index] = array [indexmin]; array [indexmin] = temp; }}書いた後、それをaに渡すと、それを実行するためにそれを取ります:
public class client {public static int [] a = {10、32、1、9、5、7、12、0、4、3}; //プリセットデータアレイpublic static void main(string [] args){abstractsort s = new Concretesort(); S.Showsortresult(a); }}実行結果:
結果をソート:0 1 3 4 5 7 9 10 12 32
テンプレートメソッドパターンの構造
テンプレートメソッドパターンは、抽象クラスと継承構造を介した実装クラス(またはグループの)で構成されています。抽象クラスの方法は、3つのタイプに分割されます。
要約方法:親クラスはそれを宣言するだけですが、実装しませんが、仕様を定義し、そのサブクラスでそれらを実装します。
テンプレートメソッド:抽象クラスによって宣言および実装されています。一般的に言えば、テンプレートメソッドは抽象的なメソッドを呼び出して主な論理関数を完成させ、テンプレートメソッドは最終タイプとして定義されており、主な論理関数をサブクラスで書き直すことができないことを示しています。
フック方法:抽象クラスによって宣言および実装されています。ただし、サブクラスを拡張でき、サブクラスはフックメソッドを拡張することにより、テンプレートメソッドのロジックに影響を与える可能性があります。
抽象クラスのタスクは、抽象クラスの品質がプログラムが安定しているかどうかを直接決定するため、通常、経験豊富な人員によって書かれた論理フレームワークを構築することです。
実装クラスは、詳細を実装するために使用されます。抽象クラスのテンプレートメソッドは、クラス拡張メソッドを実装することによりビジネスロジックを完了します。実装クラスの拡張メソッドがユニットテストに合格している限り、全体的な関数には、テンプレートメソッドが正しいという前提で大きなエラーがありません。
テンプレートメソッドモードの利点:
1.変更されていない部分をカプセル化し、変数部分を展開します
2。メンテナンスを簡単にするためにコードの公開部分を抽出します
3.行動は親クラスによって制御され、子クラスによって実装されます
テンプレートメソッドモードに適用されるシナリオ:
1.複数のサブクラスにはパブリックメソッドがあり、ロジックは基本的に同じです
2。複雑なアルゴリズムの場合、コアアルゴリズムはテンプレートメソッドとして設計されており、詳細な関数は各サブクラスによって実装されます。
3。コードのリファクタリング
テンプレートメソッドパターンの拡張
要約:
親クラスはフレームワークを確立します。子クラスが親クラスのいくつかの方法を書き換えた後、親クラスから継承された方法を呼び出して異なる結果を生み出します。