模板方法

定義:在一個方法中定義一個算法的骨架,算法的每一個實現步驟交給子類去實現,子類能夠在不改變算法骨架的基礎上,從新定義算法中的每個步驟。java

看下來面的類圖你應該能夠很明白了。算法

好比製做服裝的過程是設計、出樣、驗料、排料、裁剪、縫製、鎖眼釘釦、整燙、成衣檢驗、包裝入庫等十個工序,而每一款式的服裝在每一個環節實現是有差別的,那麼這些差別就由特定的子類來實現,超類用一個模板方法定義這十個工序ide

實現:設計

package com.jv.designpattern.templatemethod;

public abstract class DressMaking {
	//該方法就是模板方法,定義整個製做流程的步驟
	public void produce() {
		//設計
		design();
		//出樣
		sampleMaking();
		//驗料
		checkMaterial();
		//排料
		distributeMaterial();
		//裁剪
		tailor();
		//更多其餘的方法
	}
	public abstract void design();
	public void sampleMaking() {
		System.out.println("使用標準樣品製做流程生產樣品");
	}
	public void checkMaterial() {
		System.out.println("驗收物料");
	}
	public void distributeMaterial() {
		System.out.println("發放物料");
	}
	public abstract void tailor();
	//更多其餘的方法
}
package com.jv.designpattern.templatemethod;

public class MensDressMaking extends DressMaking {

	@Override
	public void design() {
		//子類決定由誰設計,如何設計
		System.out.println("由AA公司負責男裝設計");
	}

	@Override
	public void tailor() {
		//子類決定由誰裁剪,如何裁剪
		System.out.println("由AB公司負責男裝裁剪");
	}

}
package com.jv.designpattern.templatemethod;

public class WomensDressMaking extends DressMaking {

	@Override
	public void design() {
		//子類決定由誰設計,如何設計
		System.out.println("由BB公司負責女裝設計");
	}

	@Override
	public void tailor() {
		//子類決定由誰裁剪,如何裁剪
		System.out.println("由BA公司負責女裝裁剪");
	}
}
package com.jv.designpattern.templatemethod;

public class TemplateMethodTest {
	public static void main(String[] args) {
		DressMaking dm = new MensDressMaking();
		dm.produce();
		dm = new WomensDressMaking();
		dm.produce();
	}
}
相關文章
相關標籤/搜索