はじめに:
我々は唯一の変更パラメータの設定、固定されているこれらのプロセスの接続を閉じ、かかる取得JDBC接続などの港が固定されている手順の多くを持っているプロセスの開発に多くを固定している、これらの分析結果を別のセットに基づいていますこのプロセスは、「調整を行うための」エンティティ・オブジェクトは、港は、いかなる状況下でそこに固定された固定ステップ生まれ港ステップテンプレートメソッドパターンを有する固定されたアルゴリズムを有します。
Template Methodパターン(テンプレート)定義:
テンプレートと呼ばれるテンプレートメソッドパターン、多段ハッシュアルゴリズムのスケルトンを定義する親クラスを指し、多くのスクレープステップは、親クラスで達成される、いくつかのハッシュ工程はサブクラスに応じて異なる実装を有することです、達成するための抽象メソッドのサブクラスを定義一緒にこすりするステップを達成するために、これらの「不確実」を置きます。コアテンプレートモデルは、サブクラスの場合にある特定の手順ハッシュアルゴリズムを再定義し、アルゴリズムの構造を変更しません。行動のデザインパターンに属します。アプリケーションは非常に広く、BaseExecutorにかかるMyBatisの分散され、JdbcTemplate春;のHibernateTemplate、種々のテンプレートのMQ、ならびにMongodbTemplate等のSpring統合のスプリングHibernateの統合......
ロールモデル:
抽象クラス(AbstractClass):アルゴリズムのバックボーンを定義するためのテンプレートメソッドを実装します。
具象クラス(コンクリート):親クラス定義のアルゴリズムがより完全であるように、抽象クラス抽象場所を実装します。
コードの実装:
1:抽象クラスは、プロセスを定義し、私たちが毎日のプロセスを仕事をしなければならないよう:スタート- >ライト・コード(別のプログラマは異なるコードを書くこと- >オフ、プロセス全体の電源のオンとオフは、書き込みコードを除いて、同じですこのステップ港異なる、書き込みJavaコードにJavaプログラマは、PHPのPHPプログラマはコードを書くために、私たちは抽象親クラスでこのプロセスを定義します。
パブリック 抽象 クラスの仕事{ // ハッシュアルゴリズムのステップ・プロセスの定義 公共 ボイドWORKDAY(){ @ 1:ワーキング電力 openComputer(); // 2:移動レンガ:コード書き込み コーディング(); // 。3:オフ通勤
closeComputer();
} // 起動 プライベート 決勝 無効{)(openComputerを System.out.println(「あなたのブートに達しについて」)。 } // 書き込みコード 保護 抽象 のボイド(コーディング)。 // シャット プライベート 決勝 無効closeComputer(){ System.out.println( "仕事から、シャットダウン" ); } }
2:実現
Javaプログラマ
パブリック クラス JavaProgrammerは、拡張作業を{ @オーバーライド 保護された ボイドコーディング(){ System.out.println( "Javaプログラマアイデアを開くには、書き込みのJavaコード..." ); } }
PHPプログラマー
パブリック クラス PhpProgrammerは、拡張作業を{ @オーバーライド 保護された ボイドコーディング(){ System.out.println( "PHPプログラマーオープンZendのスタジオ、PHPは...コードを書きます" )。 } }
3:使用
パブリック クラスTemplateMethodDemo { パブリック 静的 ボイドメイン(文字列[]引数){ 作業javaProgrammer = 新しいJavaProgrammer(); javaProgrammer.workDay(); System.out.println( "================" ); 仕事phpProgrammerは = 新しいPhpProgrammerを(); phpProgrammer.workDay(); } }
業績
テンプレートパターンは、ソースコードに反映しました。
1:HttpServletを私たちが毎日使うサービス方法、異なる場合elseロジック呼び出しのクライアントが安らかな通話を実現するために、このような同様のdoGet、doPostメソッド、doDeleteとして呼び出す方法を決定する方法に応じて、コールフローを定義するサービス方法、内部私たちのサーブレットを達成するために、具体的doGetメソッド、doPostメソッドは、私たち自身の定義に書き換えることができます。
2:MyBatisのは、フレームワーク、いくつかの古典的かつ実用的には実装が最もSQLの実行ロジックの場合、いくつかの方法が子クラスのカスタマイズを教えるためにすることを基本的なSQLの実行クラスである、などBaseExecutorクラスとして、がありますが、次のようにソースコードがあり、完了です。
どのはdoupdate()、doFlushStatements()、doQuery()、doQueryCursor()メソッドは、サブクラスによって実装され、BaseExecutorそれらのサブクラスそれ?私たちは、彼のクラス図を見てください:
我々は行くと、それぞれ特定のサブクラスごとに異なる実装を見ることができます。
テンプレートモードの長所と短所:
利点:
1:テンプレートパターンを使用すると、コードの再利用性を増大させる、抽象親クラスの処理ロジックに同じコードであってもよいです。
2:異なるサブクラスに異なる論理は、新しい動作サブクラスを追加するように拡張拡散符号改善しました。
3:親クラスで書かれた同じ動作、開閉の原則に沿ったもので、優れたプラットフォームのコードの再利用を提供し、重複したコードのサブクラスを削除します。
4:プロジェクトの初期段階にある同社のシニアエンジニアや建築家は、テンプレートパターンを使用することができ、他のコーディング技術者が特定を達成するために働くように、プロセスを定義しました。
短所:
1:各抽象クラスは、クラスの数が増大する、達成する少なくともサブクラスを必要とします。
2:クラスの数が増加するが、間接的に、システムの複雑さを増大させます。
3:自分の欠点を継承するので、親クラスがサブクラスとして知られる新しい抽象メソッドを追加する場合は、再び達成しなければなりません。