Java设计模式—模板方法模式

前言:模板方法模式是模板模式的一个具体实现,它定义了一个抽象类,其中包含一个模板方法和若干个基本方法。其中模板方法定义了算法骨架,而基本方法则由子类来实现。因此,模板方法在定义算法的结构方面提供了支持,而基本方法则在定义算法的具体实现细节方面提供了支持。

文章目录:

  1. 概念
  2. 作用
  3. 优、缺点
  4. 代码案例

一、模板模式的概念

模板模式是一种行为设计模式,定了一个操作中的算法骨架,而且将一些步骤延迟到子类中。模板方法使得子类可以在不改变一个算法的结构情况下,既可重定义该算法的某些特定步骤

简单的理解就是:模板模式是一种行为设计模式,提供了一个框架来定义执行算法的步骤,子类可以实现具体的步骤,同时保留算法的结构。

二、模板方法模式的作用

模板方法模式的主要作用如下:

  • 模板方法将公共的算法步骤封装在父类中,子类只需要实现自己特有的算法步骤即可。这样可以避免重复编写相同的代码,提高代码复用性。

  • 当需求变更时,只需要修改子类中的算法步骤即可,不需要修改父类的算法结构,因此可以减少对系统其他部分的影响。

  • 模板方法模式符合开闭原则,即对扩展开放,对修改关闭。通过定义抽象父类,可以在不修改原有代码的情况下扩展系统功能。

  • 客户端只需要调用模板方法即可,无需关心具体实现细节,降低了客户端的使用难度。

三、模板方法模式的优、缺点

优点:

  • 提高代码复用性

  • 便于维护和扩展

  • 实现了开闭原则

  • 简化了客户端调用

缺点:

  • 增加了系统的抽象性和理解难度:由于模板方法模式将算法步骤封装在抽象父类中,因此增加了系统的抽象性和理解难度。

  • 可能会带来过多的子类:如果模板方法中的算法步骤比较多,可能需要为每个步骤都定义一个子类,这样可能会导致系统中存在过多的子类,简称:“类爆炸”。

  • 不适用于所有场景:模板方法模式适用于具有相同或类似流程的算法,但不适用于那些完全不同的算法。

四:模板方法模式的代码案例

以老师上课为案例

UML 类图

1)创建抽象类

package edu.nf;

/**
 * @author 半杯可可
 * @date 2023/6/5
 */
public abstract class Teacher {

    /**
     * 所有老师上课都是一样的点名
     */
    public void call() {
        System.out.println("上课点名");
    }

    /**
     * 上课,不同的老师做不同的实现
     */
    public abstract void lesson();

    /**
     * 布置作业,不同专业布置不同的内容
     */
    public abstract void homework();

    /**
     * 这就是模版方法,将业务执行的步骤顺序封装在这个方法中
     * 并暴露给客户端调用
     */
    public void work() {
        call();
        //调用的是子类实现的方法
        lesson();
        //判断钩子是否剔除了此方法
        if(hock()) {
            //调用的是子类实现的方法
            homework();
        }
    }

    /**
     * 钩子方法,子类负责重写这个方法来剔除不需要的步骤,
     * 默认值为true表示不剔除
     * @return
     */
    protected boolean hock() {
        return true;
    }
}

2)创建一个JavaTeacher类继承Teacher抽象类

package edu.nf;

/**
 * @author 半杯可可
 * @date 2023/6/5
 */
public class JavaTeacher extends Teacher{

    @Override
    public void lesson() {
        System.out.println("上Java课程");
    }

    @Override
    public void homework() {
        System.out.println("布置Java作业");
    }
}

3)再创建一个EnglishTeacher类继承Teacher抽象类

package edu.nf;

/**
 * @author 半杯可可
 * @date 2023/6/5
 */
public class EnglishTeacher extends Teacher {

    @Override
    public void lesson() {
        System.out.println("上英语课");
    }

    @Override
    public void homework() {
        System.out.println("布置英语作业");
    }

    @Override
    protected boolean hock() {
        return false;
    }
}

4)代码Main测试

package edu.nf;

public class Main {
    public static void main(String[] args) {
        Teacher teacher = new JavaTeacher();
        teacher.work();
    }
}

总结:

模板方法模式是一种简单、易用、灵活的设计模式,可以有效地提高代码的复用性和可维护性,是软件开发中常用的一种设计模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半杯可可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值