模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的接口即可重定义该算法的某些特定步骤。
UML图:
package com.thpin.repository.designpattern;
public class TemplateMethodDemo {
public static void main(String[] args) {
AbstractClass ac = null;
ac = new ConcreteClassA();
ac.templateMethod();
ac = new ConcreteClassB();
ac.templateMethod();
}
}
/*
* 抽象模板
*/
abstract class AbstractClass {
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
public void templateMethod() {
primitiveOperation1();
primitiveOperation2();
}
}
/*
* 具体类A
*/
class ConcreteClassA extends AbstractClass {
public void primitiveOperation1() {
System.out.println("具体类A.操作1");
}
public void primitiveOperation2() {
System.out.println("具体类A.操作2");
}
}
/*
* 具体类B
*/
class ConcreteClassB extends AbstractClass {
public void primitiveOperation1() {
System.out.println("具体类B.操作1");
}
public void primitiveOperation2() {
System.out.println("具体类B.操作2");
}
}
结果:
具体类A.操作1
具体类A.操作2
具体类B.操作1
具体类B.操作2
模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来实现它的优势。它可以提供一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。jdk中集合框架就是模板方法模式的典型案例