设计模式:模板模式

目录

一、定义

二、场景

业务场景

Java源码中的应用

三、例子

四、优缺点

优点

缺点


一、定义

模板模式又叫模板方法模式,是指定义一个算法的骨架,也就是执行的步骤模板,然后由子类去实现其中一个或几个步骤。属于行为型设计模式。

二、场景

完成一件事情,需要若干步骤,这些步骤基本相同,可能存在某几个步骤的实现有些许不同的情况。

比如:

业务场景

买杯奶茶:选餐---下单---支付---制作---出餐---评价

入职流程:填写入职登记表---打印简历---复印身份证、学位证书等---签合同---建立花名册---办理工牌---分配工位

上网课:老师发布预习资料---制作课件---直播上课---上传课堂笔记---布置作业---检查作业

Java源码中的应用

AbstractList中的get方法

BaseExecutor的doUpdate、doQuery等

HttpServlet中的service方法

三、例子

下面以上网课为例。

java 复制代码
public abstract class Course {
    protected final void createCourse() {
        //1.发布预习资料
        uploadPreview();
        //2.制作课件
        makePPT();
        //3.直播或录播上课
        attendClass();
        //4.上传课堂笔记
        uploadNote();
        //5.布置作业
        if(needHomework()) {
            //6.检查作业
            checkHomework();
        }
    }

    final void uploadPreview() {
        System.out.println("上传预习资料");
    }

    final void makePPT() {
        System.out.println("制作课件");
    }

    abstract void attendClass();

    final void uploadNote() {
        System.out.println("上传课堂笔记");
    }

    abstract boolean needHomework();

    abstract void checkHomework();
}
java 复制代码
public class JavaCourse extends Course {
    private boolean needHomework = false;

    public JavaCourse(boolean needHomework) {
        this.needHomework = needHomework;
    }

    @Override
    void attendClass() {
        System.out.println("Java直播上课");
    }

    @Override
    boolean needHomework() {
        return needHomework;
    }

    @Override
    void checkHomework() {
        System.out.println("检查Java作业");
    }
}
java 复制代码
public class PythonCourse extends Course {
    private boolean needHomework = false;

    public PythonCourse(boolean needHomework) {
        this.needHomework = needHomework;
    }

    @Override
    void attendClass() {
        System.out.println("Python录播上课");
    }

    @Override
    boolean needHomework() {
        return false;
    }

    @Override
    void checkHomework() {
        System.out.println("检查Python作业");
    }
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        System.out.println("----- Java课程 -----");
        Course java = new JavaCourse(true);
        java.createCourse();

        System.out.println("----- Python课程 -----");
        Course python = new PythonCourse(false);
        python.createCourse();
    }
}
java 复制代码
----- Java课程 -----
上传预习资料
制作课件
Java直播上课
上传课堂笔记
检查Java作业
----- Python课程 -----
上传预习资料
制作课件
Python录播上课
上传课堂笔记

四、优缺点

优点

1.提高代码复用性,将重复的代码放在抽象类中,由子类去个性化实现不同功能。

2.提高代码扩展性,只需要增加一个子类来实现一个不同功能。

3.符合开闭原则

缺点

1.类的数目增加,间接增加系统复杂度。

2.如果父类增加新的抽象方法,那么所有子类都要改。

相关推荐
桦说编程3 小时前
Guava 迭代器增强类介绍
java·后端·设计模式
李宥小哥9 小时前
创建型设计模式1
stm32·嵌入式硬件·设计模式
李宥小哥9 小时前
结构型设计模式2
网络·数据库·设计模式
guangzan12 小时前
TypeScript 中的策略模式
设计模式
乐悠小码13 小时前
Java设计模式精讲---04原型模式
java·设计模式·原型模式
李宥小哥16 小时前
行为型设计模式2
windows·设计模式
Juchecar17 小时前
Java示例:设计模式是如何在实战中“自然生长”出来
java·设计模式
Juchecar17 小时前
超越经典23种设计模式:新模式、反模式与函数式编程
设计模式·云原生·函数式编程
Juchecar17 小时前
设计模式不是Java专属,其他语言的使用方法
java·python·设计模式