“模版方法模式定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可定义该算法的某些特定步骤”
案例
模版方法模式定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。什么意思呢?将一些步骤延迟到子类中,可以理解为实现的细节放入到子类中,而整个实现过程在模版方法中早已定义好。
在最初学习数据的时候,你还记得有哪几步吗?
1. 加载驱动
2. 建立连接
3. 获取Statement
4. 拼接参数(针对PreparedStatement)
5. 执行
6. 返回结果
7. 销毁连接
写了一个连接代码:
这是我们初学Java连接数据库时候,自己写数据库的连接和查询,可能后续我们也对上面代码进行了优化,比如我们将1,2,3,4,7这几个步骤单独拿出来进行封装,而把5,6步骤暴露出去。其实这就是模版方法模式。
这里大家看一下过程:
简单的说就是对不变的代码进行一次抽取,对代码的重复利用。不知道有没有小伙伴还记得定义:模版方法模式定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。
我们上面好像没有涉及到子类,只是简单的抽离代码。我们来看一下Spring中的JdbcTemplate这个类
JdbcTemplate继承了JdbcAccessor,而JdbcAccessor就是一个抽象类,换句话说可以把它当作模版,它的方法比如getDataSource在JdbcTemplate被调用(大家可以去看一下源码)。
我们继续往下看,这里我们自己定义一个抽象类出来
这个抽象类中,一共有5个方法,其中exe()是抽象方法,isClose()我们通常叫它钩子函数,通过它我们能知道是否关闭数据库连接。而run方法是一次数据执行的完整过程,子类只需要重写exe()方法,如果对于是否关闭数据库有特殊要求,可以重写钩子函数。我们来写一个它的子类。
执行结果:
看到这里对于模版方法模式是否已经理解了?
其实模版模式很简单,也许你平时就用的很多,只是你不知道它就是一种模式
今天小程序更细题库:
进入小程序
1.什么是设计模式?你是否在你的代码里面使用过任何设计模式?
2.模板模式解决了什么问题?
3.策略模式有什么好处??
4.你可以说出几个在JDK库中使用的设计模式吗?
5.举出一个例子,在这种情况你会更倾向于使用抽象类,而不是接口
领取专属 10元无门槛券
私享最新 技术干货