一、定义

定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类重新定义算法的某些特定步骤而不改变算法的结构。

二、类图表示

模板方法模式

三、实现

1、AbstractClass

package pattern.behavioral.templatemethod;

public abstract class AbstractClass {

	public abstract void primitiveOperation1();
	public abstract void primitiveOperation2();

	public void templateMethod(){
		System.out.println("do something...");
		primitiveOperation1();
		System.out.println("do other something...");
		primitiveOperation2();
	}
}

2、ConcreteClass

package pattern.behavioral.templatemethod;

public class ConcreteClass extends AbstractClass {

	@Override
	public void primitiveOperation1() {
		System.out.println("called ConcreteClass primitiveOperation1()");
	}

	@Override
	public void primitiveOperation2() {
		System.out.println("called ConcreteClass primitiveOperation2()");
	}

}

四、使用

package pattern.behavioral.templatemethod;

public class Client {

	public static void main(String[] args) {
		AbstractClass c = new ConcreteClass();
		c.templateMethod();
	}
}

  • 程序输出:
do something...
called ConcreteClass primitiveOperation1()
do other something...
called ConcreteClass primitiveOperation2()

五、适用场合

  • 一次性实现一个算法不变的部分,将可变的部分留到子类中实现
  • 子类中共有的行为应该被提取到父类中以避免代码重复
  • 控制子类的扩展(只允许在特定的点扩展)