这是我参与更文挑战的第7天,活动详情查看: 更文挑战
本文正在参加「Java主题月 - Java 开发实战」,详情查看 活动链接
今天开始继续我们的设计模式,先说说模板模式吧
模板模式 Template Pattern
何为模板模式?
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式的优点
- 封装性好;
- 复用性好;
- 屏蔽细节;
- 便于维护;
简单的说,就是完成一个任务有固定的步骤,但每个步骤的细节不同
模板模式的使用场景:
比如:如何把大象放进冰箱? 第一步:打开冰箱门,第二步:把大象塞进冰箱,第三步:关闭冰箱门。
比如:如何更文? 第一步:打开掘金写文章页面;第二步:畅所欲言;第三步:发布文章
-
主要解决:一些方法通用,却在每一个子类都重新写了这一方法。
-
何时使用:有一些通用的方法。
-
如何解决:将这些通用算法抽象出来。
-
关键代码:在抽象类实现,其他步骤在子类实现。
话不多说,先代码实现一遍
public class TemplatePatternDemo {
public static void main(String[] args) {
JuejinWriting writing = new JuejinWriting();
writing.write();
}
}
//创建一个写文章步骤的抽象类
abstract class Writing {
abstract void openPage();
abstract void startedWriting();
abstract void publishArticle ();
//模板
public final void write(){
//打开页面
openPage();
//开始写作
startedWriting();
//发布文章
publishArticle();
}
}
//创建拓展写文章步骤的实现类
class JuejinWriting extends Writing {
@Override
void openPage() {
System.out.println("打开掘金写文章页面!");
}
@Override
void startedWriting() {
System.out.println("开始写文章.");
}
@Override
void publishArticle() {
System.out.println("文章发布成功!");
}
}
复制代码
运行结果
模板方法与策略方法的区别?
模板模式都是由抽象类来定义一个算法,在算法实现的不同步骤上抽象方法由子类继承并提供具体实现,常见的就是不同步骤提供抽象方法留给子类实现。模板模式一般有两部分组成,即抽象模板和具体模板。
策略模式(此处链接上一篇文章:策略模式的使用)则是以接口形式提供抽象接口。由具体实现类提供不同算法。策略模式一般由3部分组成
一个Context持有所有策略实现类引用,提供给客户端运行 一个策略接口提供 具体的策略实现类
因此,可以看出策略模式的关注点更广,模板模式的关注点更深。这两种模式可以一起使用,即具体某个策略下可以通过模板减少不同步骤的冗余代码。
简单来说,策略模式说的的是完成一件事情的不用方式,模板方法说的是完成一件事情的不同步骤;一起使用,也就是说,完成一件事情的时候,选择不同的方法,然后每个方法有分为多个步骤来实现
Spring中模板方式的应用
Spring 中的 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,这些就使用到了模板模式。 比如在JDBC中,事务大致的使用结构如下:
- 开启事务
- 业务逻辑处理
- 提交事务
今日小结
对模板方法了解中,通过与其他设计模式(策略模式)进行比较,能够发现不同设计模式各自的特点,可以看出来,不同设计模式结合使用,能使代码结构更加优化。