模板方法

定义:在一个方法中定义一个算法的骨架,算法的每一个实现步骤交给子类去实现,子类能够在不改变算法骨架的基础上,从新定义算法中的每个步骤。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();
	}
}
相关文章
相关标签/搜索