设计模式:模板方法模式(Template Method)
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/template-method/
?模板方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。一次性的實現一個算法的不變部分,并將可變的行為留給子類來實現。
?模板方法的關鍵是:子類可以置換掉父類的可變部分,但是子類卻不可以改變模板方法所代表的頂級邏輯。
?模板方法模式中的方法可以分為兩大類:模板方法和基本方法。
1 模板方法
?一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。
?一個抽象類可以有任意多個模板方法,而不限于一個。每一個模板方法都可以調用任意多個具體方法。
2 基本方法
?基本方法又可以分為三種:抽象方法(Abstract Method)、具體方法(Concrete Method)和鉤子方法(Hook Method)。
?抽象方法:一個抽象方法由抽象類聲明,由具體子類實現。
?具體方法:一個具體方法由抽象類聲明并實現,而子類并不實現或置換。
?鉤子方法:一個鉤子方法由抽象類聲明并實現,而子類會加以擴展。通常抽象類給出的實現是一個空實現,作為方法的默認實現。這種空的鉤子方法叫做“Do Nothing Hook"。鉤子方法的名字應當以do開始,這是熟悉設計模式的Java開發人員的標準做法。譬如HttpServlet類中,也遵從這一命名規則:doGet, doPost等。 在HttpServlet中模板方法由service()方法擔任,基本方法由doPost(),doGet()等方法擔任。
案例
1 AbstractClass
2 ConcreteClass
public class ConcreteTemplate extends AbstractTemplate {@Overrideprotected void abstractMethod(){System.out.println("ConcreteTemplate-abstractMethod");}@Overridepublic void doHookMethod(){System.out.println("ConcreteTemplate-doHookMethod");} }參考資料
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/template-method/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的设计模式:模板方法模式(Template Method)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式:享元模式(Flyweight)
- 下一篇: 设计模式:解释器模式(Interpret