设计模式-模板方法模式

Posted fonxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-模板方法模式相关的知识,希望对你有一定的参考价值。

模板方法模式

  • 定义

模板方法模式(Template Method),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[DP]


 

  • 优缺点

 

优点:

  1. 代码复用
  2. 子类的返回值决定父类的行为

缺点:


 

 

  • 特点
  1. 父类将子类中重复的代码抽到一个公用方法当中
  2. 可以由子类的返回值来决定这个公用方法怎么执行(钩子函数)

 


 

 

  • 结构

AbstractClass:拥有模板方法的父类

ConcreteClass:使用模板方法的子类

技术图片

 


 

 

  • 代码

例子:两个学生考试,试卷题目一样,答案不一样,打印出来

        父类

/**
 * @ Author     :fonxi
 * @ Date       :2019/5/22 16:00
 * @ Description:模板方法类
 */
public abstract class AbstractClass {
    abstract String primitiveOperation1();
    abstract String primitiveOperation2();

    public void templateMethod(){
        System.out.print("设计模式有多少种:");
        System.out.println(primitiveOperation1());
        System.out.print("抽象类中不能有非抽象方法:");
        System.out.println(primitiveOperation2());
    }
}

  使用模板方法的子类

/**
 * @ Author     :fonxi
 * @ Date       :2019/5/22 16:02
 * @ Description:实现类
 */
public class ConcreteClass1 extends AbstractClass{
    @Override
    String primitiveOperation1() {
        return "23";
    }

    @Override
    String primitiveOperation2() {
        return "错";
    }
}

  

/**
 * @ Author     :fonxi
 * @ Date       :2019/5/22 16:10
 * @ Description:实现类
 */
public class ConcreteClass2 extends AbstractClass {
    @Override
    String primitiveOperation1() {
        return "25";
    }

    @Override
    String primitiveOperation2() {
        return "对";
    }
}

  

/**
 * @ Author     :fonxi
 * @ Date       :2019/5/22 16:01
 * @ Description:客户端调用类
 */
public class TestController {
    public void print(){
        AbstractClass abstractClass;

        abstractClass = new ConcreteClass1();
        System.out.println("学生一的试卷:");
        abstractClass.templateMethod();

        System.out.println("---------------------------------------------------------------------------");

        abstractClass = new ConcreteClass2();
        System.out.println("学生二的试卷");
        abstractClass.templateMethod();
    }
}

  输出:

学生一的试卷:
设计模式有多少种:23
抽象类中不能有非抽象方法:错
---------------------------------------------------------------------------
学生二的试卷
设计模式有多少种:25
抽象类中不能有非抽象方法:对

  

 


 

 

  • 总结

把的重复的代码抽取到模板方法当中,起到复用的效果,模板方法模式算是最常用到的设计模式之一了,。

以上是关于设计模式-模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之模板方法模式代码示例

设计模式---- 模板方法模式

行为型设计模式之模板方法模式

Spring针对事务处理提供哪两种事务编程模式。

设计模式之模板方法模式(Template Method)详解及代码示例

设计模式之模板方法模式实战解析