前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2.设计模式--模板方法模式(TemplateMethod模式)

2.设计模式--模板方法模式(TemplateMethod模式)

作者头像
大猫的Java笔记
发布2021-09-29 15:45:32
2060
发布2021-09-29 15:45:32
举报
文章被收录于专栏:大猫的Java笔记

1.场景

模板方法模式,听名字就知道这个肯定和模板有关系,有这样一个逻辑,厨师炒菜,炒菜都是先打火,然后放油、放盐、翻炒、起锅、关火无论是我们炒土豆还是青菜,实际上都是按照这个模板来,步骤都是那么几步,都是按照顺序来的。

2.模板方式结构图

3.实现模板方法模式

TemplateMethod就是炒菜的模板,定义了抽象方法。其中具体的实现是交给子类去做的。TemplateMethod负责模板,就像炒菜模板只给了步骤,具体放多少油、放多少菜、翻炒多少下应该是子类去决定。cooking方法定义了模板的执行顺序,同时由于点火和起锅在炒菜这个例子中是都需要的,所以可以直接在模板中进行实现。

Potato表示土豆丝的做法,其中定义了具体放多少调料和多少油以及具体的翻炒次数。

Vegetables表示蔬菜的做法,其中定义了具体放多少调料和多少油以及具体的翻炒次数

测试输出结果,可以看到炒土豆和蔬菜虽然共用了一个模板,但是实际上做出来的确实2种不同的菜。模板方法在做实现的时候,需要关注模板类具体的执行步骤,如果我们不使用模板方法,一旦顺序改变比如最后是先关火再起锅的话,这种情况所有关于做菜的类全部都需要进行更改。模板方法适用于步骤有一定顺序的业务,例如连接池、线程池、都是先去拿链接然后使用做具体的事情,最后干完了放回去。

4.JDK中的模板方法模式

在AQS中就使用了模板方法。其中tryAcquire方法是需要在子类中进行具体实现的,而acquire则定义了执行的顺序。

模板方法模式的优缺点如下

优点:

1.可以提取公共的代码(点火、起锅)这种公共的都是通过父类来定义而子类只需要继承。

2.同时扩展性强,需要整个更改流程的时候只需要更改模板,同时父类只需要定义顺序,子类来实现具体的内容。

缺点:

1.子类在做继承的时候必须要注意父类的具体顺序

2.如果模板中需要插入新的步骤,此时所有子类都需要进行实现(即使某些子类并不需要)

参考文献:《图解设计模式》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档