Javaのグラフィカルなデザインパターンテンプレートモード

牛乳生産の問題

1)牛乳選択プロセスの生産- 「成分を追加- 」浸漬- 「豆乳はに分け
、異なる成分を添加することにより、2)牛乳の異なる味生成することができます
)3を選択し、プレイ豆乳に浸しました各ミルクの味のためにこれらのステップが同じで壊れ
、それは、このプログラムを考えることは容易である、4)テンプレートメソッドパターンは比較的単純であるため、直接使用すること。

Template Methodパターンの基本的な導入

1)メソッドパターンテンプレート(Template Methodパターン)も知られているテンプレートパターン(テンプレートパターン)は、抽象クラス定義カテゴリテンプレート方法を実行します。達成するために必要に応じてそのサブクラスでは、メソッドをオーバーライドすることができますが、呼び出しは抽象クラスで定義されます。
2)簡単に説明すると、テンプレートメソッドサブクラスが再定義することができるアルゴリズムの特定のステップに、アルゴリズムの構造を変更できないように、アルゴリズム、サブクラス遅延にいくつかのステップの動作のスケルトンを定義します
3)デザインパターンのこのタイプは、行動パターンに属します。

Template Methodパターンのクラス図の原則

ここに画像を挿入説明
原理を示すクラス図:
1)AbstractClass抽象クラス、クラスのメソッド実装クラステンプレート(テンプレート)、骨格アルゴリズム定義されたクラス、サブクラスのニーズが特定を実現するために、他の抽象メソッドはoperationr2,3,4。
2)ConcreteClassは、抽象メソッドはoperationr2,3,4特性サブクラスを完了するためのアルゴリズムステップを実現します。

牛乳生産の問題を解決するためのテンプレートメソッドパターン

1)応用例クレーム
牛乳の生産で書かれたプログラムとして、以下のとおり
選択プロセスにおける牛乳の生産- 「成分を追加- 」浸漬- 「豆乳はに分かれ
異なる成分を加えることで、牛乳の異なる味を生成することができます
豆乳に選択、浸漬およびブレークはこれらの各ステップのために準備同じミルク味です(小豆、落花生、牛乳...)
2)のクラス図
ここに画像を挿入説明

package com.example.demo.template;

/**
 * 抽象类,表示豆浆
 * @author zhaozhaohai
 *
 */
public abstract class SoyaMilk {
	
	/**
	 * 模版方法,make,模版方法可以做成final,不让子类去覆盖。
	 */
	final void make() {
		select();
		addCondiments();
		soak();
		beat();
	}
	
	/**
	 * 选材料
	 */
	void select() {
		System.out.println("第一步 :选择好的新鲜黄豆 ");
	}
	
	/**
	 * 添加不同的配料,抽象方法,子类具体实现
	 */
	abstract void addCondiments();
	
	/**
	 * 浸泡
	 */
	void soak() {
		System.out.println("第三步 :黄豆和配料开始浸泡,需要3小时 ");
	}
	
	void beat() {
		System.out.println("第四步 :黄豆和配料放到豆浆机去打碎 ");
	}
}
package com.example.demo.template;

public class RedBeanSoyaMilk extends SoyaMilk{
	
	@Override
	void addCondiments() {
		// TODO Auto-generated method stub
		System.out.println(" 加入上好的红豆 ");
	}
}
package com.example.demo.template;

public class PeanutSoyaMilk extends SoyaMilk{
	@Override
	void addCondiments() {
		// TODO Auto-generated method stub
		System.out.println(" 加入上好的花生 ");
	}
}
package com.example.demo.template;

public class Client {
	public static void main(String[] args) {
		// 制作红豆豆浆
		System.out.println("-- 制作红豆豆浆 --");
		SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk();
		redBeanSoyaMilk.make();
		System.out.println("-- 制作花生豆浆 --");
		SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
		peanutSoyaMilk.make();
	}
}

フックメソッドテンプレートメソッドパターン

場合は、サブクラスが呼び出され、それをカバーしていないかもしれとして1)親クラスのテンプレートメソッドパターンでは、我々は、デフォルトでは何もしないメソッドを定義する「フック。」
2)または説明する上記実施例で作製豆乳、例えば、純粋なミルクの生産は、フックメソッドを使用して、テンプレート変形方法の正面上の任意の成分を追加しません。

package com.example.demo.template;

/**
 * 抽象类,表示豆浆
 * @author zhaozhaohai
 *
 */
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("第四步 :黄豆和配料放到豆浆机去打碎 ");
	}
	
	/**
	 * 钩子方法,决定是否需要添加配料
	 * @return
	 */
	boolean customerWantCondiments() {
		return true;
	}
}
package com.example.demo.template;

public class PureSoyaMilk extends SoyaMilk{

	@Override
	void addCondiments() {
		// TODO Auto-generated method stub
		// 空实现
	}
	
	@Override
	boolean customerWantCondiments() {
		// TODO Auto-generated method stub
		return false;
	}

}

ソーススプリングフレームワーク内のテンプレートメソッドパターン解析

ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここでは、2つのフックメソッド、デフォルトの空の実装です、サブクラスが達成することができます。
ここに画像を挿入説明
ここに画像を挿入説明
以下は、サブクラスが実装されています
ここに画像を挿入説明
ここに画像を挿入説明

ノートやテンプレートメソッドパターンの詳細

    1. 基本的な考え方は次のとおりです。このアルゴリズムは、親クラスに変更することは容易である一つの場所に存在しています。必要性は、アルゴリズムを変更する場合には、限り、親クラスのメソッドは、特定のステップをテンプレートを変更するか、すでに実装するため、サブクラスはそれらの変更を継承します
    2. 最大化、コードの再利用への実装クラス。ステップのいくつかは、直接の継承を使用して、テンプレートメソッド親クラスとサブクラスを実現します。
    3. どちらの統一されたアルゴリズムは、また、優れた柔軟性のクラスを提供します。サブクラスで実装手順の一部を提供しながら、親クラスのアルゴリズム構造は、変わらないままであることを保証するために、テンプレートベースの方法。
    4. モデルの不備:異なる実装の各システムは、より実質的な製造、クラスの数を増加させることで、その結果、達成するサブクラスを必要とします
    5. 一般的なテンプレートメソッドは、サブクラスは、テンプレートメソッドをオーバーライド防ぐために、最後のキーワードに追加されます。
    6. Template Methodパターンの使用シナリオは:プロセスで完了したときに、一連のステップを実行するためのプロセスは、ステップのこのシリーズは基本的に同じですが、個々のステップは、実装時には異なる場合があり、Template Methodパターンに対処するための開口部を検討します

おすすめ

転載: www.cnblogs.com/haizai/p/12582843.html