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

发布于 2021-09-08 04:26

1.场景

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

2.模板方式结构图

3.实现模板方法模式

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

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

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

4.JDK中的模板方法模式

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

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

  优点:

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

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

  

  缺点:  

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

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

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

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材