[設計モード]テンプレートメソッドモード


テンプレートメソッドアレイ


プログラムを記述すると重複するコードが生成されます.重複を減らすために、テンプレートメソッドモードを使用できます.
テンプレートメソッドモードは、重複コードを最小化するために使用できます.親クラスに重複部分を配置し、子クラスに変更可能、変更可能な部分を含めます.

テンプレート方法UML図と特性



抽象クラスは、共通部分を定義するクラスです.Template methodと同様の一般的な方法は抽象クラスで定義される.
特定のクラスでは、元の操作と同じ変化部分を継承されたマルチステートとして処理できます.

テンプレートメソッドアレイの例


ピザを焼くプログラムを設計します.ピザを焼くにはオーブンが必要で、ピザはいろいろな種類に広がります.
class oven{
	private ovenstate state;
	public oven(){
		state = ovenstate.ready;  
	}
	
	public void bake(){
		system.out.println("baking");
	}
}
ピザ類は抽象類として使用されるオーブンを初期化するジェネレータを有する.Makebandとputinoven法はすべてのピザに適しているので,テンプレート法で実現した.ピザの種類によって変化する成分をサブクラスで定義する.例のpiperoni pizzaクラスでは、原料から定義されます.
Pizzaクラスのputinovenはコンポーネントを呼び出し,多態性に応じてpizzaのコードを実行する.
class pizza{
	private oven o; 
	public pizza(oven o ){
		this.o = o ; 
	}
	public void makedough(){
		system.out.println("making dough");
	}
	public void putinoven(){
		ingredients();
		o.bake();
	}
	
	//primitive operation
	protected void ingredients();
}

class pepperoni_pizza extends pizza{
	public peperoni_pizza(oven o){
		super(o);
	}
	protected void ingredients(){
		system.out.println("pepperoni ingredients ready");
	}
}