模板方法模式

概念

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

换句话来说:就是所有重复的代码都应该上升到父类去,而不是让每个子类都去重复


代码实现

目录结构



具体代码

Client类、调用对应的试卷即可。
package controller;

import service.Impl.TestPaperA;
import service.Impl.TestPaperB;
import service.TestPaper;

/**
 * @author SHshuo
 * @data 2021/10/16--15:07
 * 模板方法模式
 */
public class Client {
    public static void main(String[] args) {
        TestPaper testPaperA = new TestPaperA();
        testPaperA.TemplateMethod();

        TestPaper testPaperB = new TestPaperB();
        testPaperB.TemplateMethod();
    }
}

TestPaper类为父类、应该将答案抽象出来、子类重写对应的答案。而不是子类继承父类重写对应的问题和答案。
package service;

/**
 * @author SHshuo
 * @data 2021/10/16--15:08
 * 定义模板、将答案抽象出来,而不是子类重写每一个问题和答案
 */
public class TestPaper {

    public void TemplateMethod(){
        question1();
        question2();
        question3();
    }

    public void question1(){
        System.out.println("2 > 1 : true ? false");
        System.out.println("答案:" + answer1());
    }

    public void question2(){
        System.out.println("4 > 5 : true ? false");
        System.out.println("答案:" + answer2());
    }

    public void question3(){
        System.out.println("7 > 1 : true ? false");
        System.out.println("答案:" + answer3());
    }


    public String answer1(){
        return "";
    }

    public String answer2(){
        return "";
    }

    public String answer3(){
        return "";
    }
}

TestPaperA、TestPaperB继承TestPaper,重写对应的答案即可。
package service.Impl;

import service.TestPaper;

/**
 * @author SHshuo
 * @data 2021/10/16--15:08
 * 只需要重写答案即可
 */
public class TestPaperA extends TestPaper {
    @Override
    public String answer1() {
        return "true";
    }

    @Override
    public String answer2() {
        return "false";
    }

    @Override
    public String answer3() {
        return "true";
    }
}

UML类图




hshuo的面试之路 文章被收录于专栏

作者目标是找到一份Java后端方向的工作 此专栏用来记录从Bilibili、书本、其他优质博客上面学习的内容 用于巩固、总结内容 主要包含Docker、Dubbo、Java基础、JUC、Maven、MySQL、Redis、SpringBoot、SpringCloud、数据结构、杂文、算法、计算机网络、操作系统、设计模式等相关内容

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
耀孝女:就是你排序挂了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务