前言:模板方法模式是模板模式的一个具体实现,它定义了一个抽象类,其中包含一个模板方法和若干个基本方法。其中模板方法定义了算法骨架,而基本方法则由子类来实现。因此,模板方法在定义算法的结构方面提供了支持,而基本方法则在定义算法的具体实现细节方面提供了支持。
文章目录:
- 概念
- 作用
- 优、缺点
- 代码案例
一、模板模式的概念
模板模式是一种行为设计模式,定了一个操作中的算法骨架,而且将一些步骤延迟到子类中。模板方法使得子类可以在不改变一个算法的结构情况下,既可重定义该算法的某些特定步骤
简单的理解就是:模板模式是一种行为设计模式,提供了一个框架来定义执行算法的步骤,子类可以实现具体的步骤,同时保留算法的结构。
二、模板方法模式的作用
模板方法模式的主要作用如下:
-
模板方法将公共的算法步骤封装在父类中,子类只需要实现自己特有的算法步骤即可。这样可以避免重复编写相同的代码,提高代码复用性。
-
当需求变更时,只需要修改子类中的算法步骤即可,不需要修改父类的算法结构,因此可以减少对系统其他部分的影响。
-
模板方法模式符合开闭原则,即对扩展开放,对修改关闭。通过定义抽象父类,可以在不修改原有代码的情况下扩展系统功能。
-
客户端只需要调用模板方法即可,无需关心具体实现细节,降低了客户端的使用难度。
三、模板方法模式的优、缺点
优点:
-
提高代码复用性
-
便于维护和扩展
-
实现了开闭原则
-
简化了客户端调用
缺点:
-
增加了系统的抽象性和理解难度:由于模板方法模式将算法步骤封装在抽象父类中,因此增加了系统的抽象性和理解难度。
-
可能会带来过多的子类:如果模板方法中的算法步骤比较多,可能需要为每个步骤都定义一个子类,这样可能会导致系统中存在过多的子类,简称:“类爆炸”。
-
不适用于所有场景:模板方法模式适用于具有相同或类似流程的算法,但不适用于那些完全不同的算法。
四:模板方法模式的代码案例
以老师上课为案例
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();
}
}
总结:
模板方法模式是一种简单、易用、灵活的设计模式,可以有效地提高代码的复用性和可维护性,是软件开发中常用的一种设计模式。