什么是模板方法模式?
定义一个操作中的算法的骨架,而将一些个步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
它的应用场景在哪里呢?
当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现肯不同时,我们通常考虑用模板方法模式来处理。
它的特点有哪些?
模板方法模式是通过把不变行为搬移到超类,去除子类中重复代码来体现它的优势。模板方法就是提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
模板方法模式结构图:
模板方法实现:
AbstractClass是一个抽象类,其实也就是一抽象模板,定义并实现了一个模板方法。
/**
* 作者:LKP
* 时间:2018/7/27
*/
public abstract class AbstractClass {
public abstract void PrimitiveOperationi1();
public abstract void PrimitiveOperationi2();
public void TemplateMethod(){
PrimitiveOperationi1();
PrimitiveOperationi2();
}
}
ConcreteClass,实现父类所定义的一个或多个抽象方法。
ConcreteClassA类:
/**
* 作者:LKP
* 时间:2018/7/27
*/
public class ConcreteClassA extends AbstractClass {
@Override
public void PrimitiveOperationi1() {
System.out.println("具体类A方法1实现");
}
@Override
public void PrimitiveOperationi2() {
System.out.println("具体类A方法2实现");
}
}
ConcreteClassB类:
/**
* 作者:LKP
* 时间:2018/7/27
*/
public class ConcreteClassB extends AbstractClass {
@Override
public void PrimitiveOperationi1() {
System.out.println("具体类B方法1实现");
}
@Override
public void PrimitiveOperationi2() {
System.out.println("具体类B方法2实现");
}
}
客户端实现:
/**
* 作者:LKP
* 时间:2018/7/27
* 客户端实现
*/
public class Client {
public static void main(String[] args){
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethod();
c = new ConcreteClassB();
c.TemplateMethod();
}
}
运行结果:
减少了代码的冗余。