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