模板方法模式
一、定义
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类重新定义算法的某些特定步骤而不改变算法的结构。
二、类图表示
三、实现
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()
五、适用场合
- 一次性实现一个算法不变的部分,将可变的部分留到子类中实现
- 子类中共有的行为应该被提取到父类中以避免代码重复
- 控制子类的扩展(只允许在特定的点扩展)