模板方法模式 (父类的方法调用了子类重写的方法..)
<设计模式其实很简单>笔记
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
//抽象模板类
public abstract class AbstractClass{
public abstract void PrimitiveOperationA();
public abstract void PrimitiveOperationB();
public abstract void PrimitiveOperationC();
//抽象的模板方法
public void TemplateMethod(){
PrimitiveOperationA();
PrimitiveOperationB();
PrimitiveOperationC();
}
}
//子类A
public class ConcreteClassA extends AbstractClass{
//覆盖父类的抽象方法
@Override
public void PrimitiveOperationA(){
System.out.println("the operation of method A for ClassA");
}
@Override
public void PrimitiveOperationB(){
System.out.println("the operation of method B for ClassA");
}
@Override
public void PrimitiveOperationC(){
System.out.println("the operation of method C for ClassA");
}
}
//子类B
public class ConcreteClassB extends AbstractClass{
//覆盖父类的抽象方法
@Override
public void PrimitiveOperationA(){
System.out.println("the operation of method A for ClassB");
}
@Override
public void PrimitiveOperationB(){
System.out.println("the operation of method B for ClassB");
}
@Override
public void PrimitiveOperationC(){
System.out.println("the operation of method C for ClassB");
}
}
//客户端
public static void main(String[] args){
AbstractClass A;
A = new ConcreteClassA();
A.TemplateMethod();
A = new ConcreteClassB();
A.TemplateMethod();
}
③适用的地方:
一次性地实现一个算法不变的部分,而将可变的行为留给子类来实现。
当子类中有公共的行为可以提取到公共的父类中去,并且子类有自己的个性化要求时。
适用于模板方法模式的情形,一般子类需要扩展的地方是固定的,即允许在这些点上进行扩展。(这也是模板方法模式的局限性)