设计模式:模板方法模式
1、模板方法模式的定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2、接下来先看我们平时使用的一个例子,以支付为例,先创建一个抽象类定义通用支付流程方法,然后为每种支付方式提供自己的具体操作。
3、抽象类:

4、微信支付的实现
测试:
WeixinPay weixin = new WeixinPay();
weixin.pay();
返回:
weixin acceptParameter
weixin verify
weixin genPayurl

5、ali支付实现
测试:
AliPay ali = new AliPay();
ali.pay();
返回:
ali acceptParameter
ali verify
ali genPayurl

6、由以上2中实现方式发现,每一种方式中都存在相同的代码,
public void pay() {
this.acceptParameter();
this.verify();
this.genPayurl();
}
这个时候我们就需要思考是否是架构上出现了问题。为什么不把相同的代码放到抽象类中呢。
1、相同的代码抽象到抽象类中

2、子类中就相同的代码去掉

3、所有子类处理方式相同,将公用代码删除。
4、测试:
AliPay ali = new AliPay();
ali.pay();
返回:
ali acceptParameter
ali verify
ali genPayurl
1、spring中AbstractDetectingUrlHandlerMapping的protected abstract String[] determineUrlsForHandler(String beanName);方法由子类去BeanNameUrlHandlerMapping具体实现,这就是典型的模板方法模式。
2、spring中对ORM方式的支持,比如事务,获取连接的。
1、优点就是可以将固定不变的部分进行封装,然后需要变化的部分子类实现自己扩展。
缺点就是每新增一个业务都需要新增加类,导致系统变得复杂,可读性上变得比较差。