牛乳生産の問題
次のように、牛乳を生産プログラミング:
- 選択プロセスにおける牛乳の生産 - >成分を追加 - >ソーク - >豆乳に分け
- 別の成分を添加することで、あなたは牛乳の異なる味を作成することができます
- 選択、および豆乳に浸し豆乳のそれぞれの風味を作成する手順は同じで破ります
- テンプレートメソッドパターンが完成されたを使用してください(注:テンプレートメソッドパターンは比較的単純であるので、それは直接使用して、もはや惹起テンプレートメソッドパターンに伝統的なアプローチを使用して、このプログラムを考えることは容易ではありません)
Template Methodパターンの基本的な導入
基本的な導入
- メソッドパターンテンプレート(Template Methodパターン)も知られているテンプレートパターン(テンプレートパターン)、Zは、方法は、そのテンプレートを実行する抽象クラスの定義に開示されています。達成するために必要に応じてそのサブクラスでは、メソッドをオーバーライドすることができますが、呼び出しは抽象クラスで定義されます。
- 簡単に説明するとは、テンプレート法スケルトンモデルアルゴリズムは、サブクラスのいくつかのステップを延期しつつ、サブクラスが再定義することができ、アルゴリズムの特定の工程に、このような構成のアルゴリズムを変更することはできません、一回の操作で定義されています
- デザインパターンのこのタイプは、行動パターンを属します。
Template Methodパターンのクラス図の原則
原理の16.3.1テンプレートメソッドパターンのクラス図
は、(テンプレートメソッドパターンの役割と責任) -原理のクラス図の例示
- 抽象クラス、クラスが実装テンプレート法(テンプレート)AbstractClass、アルゴリズムは、スケルトンを定義し、具体的なサブクラスは、他の方法を抽象operationr2,3,4を実装する必要が
- ConcreteClassは、特性のサブクラスでアルゴリズムのステップを完了するために、抽象メソッドのoperationr2,3,4を実装します
牛乳生産の問題を解決するためのテンプレートメソッドパターン
-
アプリケーションの例としては、必要と
以下のように、牛乳の生産のプログラム:
ミルクフロー選択の生産は- >の成分を追加- >浸す- >豆乳は異なる成分を添加することにより、に分け、牛乳の異なる味生成することができます
選択、浸漬および放電をすべての味の牛乳生産のためのいくつかのステップに分け豆乳ものと同じ(小豆、落花生、牛乳...) -
アイデアと分析手法(図クラス)
フックメソッドテンプレートメソッドパターン
- 場合は、サブクラスが呼び出され、それをカバーしていないかもしれとして親クラスのテンプレートメソッドパターンでは、我々は、デフォルトでは何もしないメソッドを定義することができる「フック。」
- またはテンプレート方式のフロントを変換するためのフックメソッドを使用して、例えば、我々はまた、純粋なミルクを作りたい、任意の成分を追加しない、説明するために、上記の例でミルクを行います
- コードは示しています。
//抽象类,表示豆浆
public abstract class SoyaMilk {
//模板方法, make , 模板方法可以做成final , 不让子类去覆盖.
final void make() {
select();
if(customerWantCondiments()) {
addCondiments();
}
soak();
beat();
}
//选材料
void select() {
System.out.println("第一步:选择好的新鲜黄豆 ");
}
//添加不同的配料, 抽象方法, 子类具体实现
abstract void addCondiments();
//浸泡
void soak() {
System.out.println("第三步, 黄豆和配料开始浸泡, 需要3小时 ");
}
void beat() {
System.out.println("第四步:黄豆和配料放到豆浆机去打碎 ");
}
//钩子方法,决定是否需要添加配料
boolean customerWantCondiments() {
return true;
}
}
ソースのSpring Frameworkアプリケーションで16.6テンプレートメソッドパターン解析
- 春IOCコンテナTemplate Methodパターンを初期化するために適用した場合
- 分析文字コード解析+ +クラス図で説明しました。
- ソースコード(命令の階層)のクラス図
ノートやテンプレートメソッドパターンの詳細
- 基本的な考え方は次のとおりです。このアルゴリズムは、親クラスに変更することは容易である一つの場所に存在しています。必要性は、アルゴリズムを変更する場合には、限り、親クラスのメソッドは、特定のステップをテンプレートを変更するか、すでに実装するため、サブクラスはそれらの変更を継承します
- コードの再利用を最大化します。ステップのいくつかは、直接の継承を使用して、テンプレートメソッド親クラスとサブクラスを実現します。
- どちらの統一されたアルゴリズムは、また、非常に大きな柔軟性を提供します。テンプレートの親クラスのメソッドは、サブクラスによって達成手順の一部を提供しながら、アルゴリズムの構造は、変わらないままであることを確認します。
- モデルの不備:異なる実装の各システムは、より実質的な製造、クラスの数を増加させることで、その結果、達成するサブクラスを必要とします
- 一般的なテンプレートメソッドは、サブクラスがテンプレートメソッドをオーバーライド防ぐために、最後のキーワードと組み合わせています。
- Template Methodパターンの使用シナリオ:ときに一連のステップを実行するために、プロセス内のプロセスを完了するために、手順のこのシリーズは基本的に同じであるが、実装された場合、個々のステップは異なっていてもよいが、一般的にTemplate Methodパターンに対処するために考えられています