設計モードまとめのテンプレート方法モード


≪テンプレート・メソッド・モード|Template Method Mode|emdw≫:アルゴリズムのスケルトンを1つのメソッドで定義し、いくつかのステップをサブクラスに遅延します.テンプレートメソッドにより、サブクラスは、アルゴリズム構造を変更することなく、アルゴリズムのいくつかのステップを再定義することができる.テンプレートの方法については私たちの生活の中で数え切れないほどありますが、私たちが何かをするには一定の順序で実行する必要があります.HeadFirstの例のように、スターバックスがコーヒーを入れるときは、まず水を沸かして、沸騰した水でコーヒーを入れて、コーヒーをコップに入れて、砂糖を入れて牛乳を飲んで、他のものを加えることができます(他のものは個人の趣味によって入れなくてもいいです).
public abstract class CaffeineBeverage {
	final void prepareRecipe(){
		boilWater();
		brew();
		pourInCpu();
		addCondments();
		if (like()) {
			addOthers();
		}
	}
	abstract void brew();
	abstract void addCondments();
	void boilWater(){
		System.out.println("Boiling water");
	}
	void pourInCpu(){
		System.out.println("Pouring into cpu");
	}
	boolean like(){
		return true;
	}
	void addOthers(){
		System.out.println("Add Others");
	}
}
public class Coffee extends CaffeineBeverage{

	@Override
	void brew() {
		System.out.println("Dripping Coffee through filter");
	}

	@Override
	void addCondments() {
		System.out.println("Adding Suger and Milk");
	}

}
public class Tea extends CaffeineBeverage{

	@Override
	void brew() {
		System.out.println("Steeping the tea");
	}

	@Override
	void addCondments() {
		System.out.println("Adding lemon");
	}

}
public class WaysTest {
	public static void main(String[] args) {
		Coffee coffee = new Coffee();
		coffee.prepareRecipe();
		Tea tea = new Tea(){
			@Override
			boolean like() {
				return false;
			}
		};
		tea.prepareRecipe();
	}
}