定義
Template Method Pattern:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
模板方法模式:定義一個操作中的算法的框架腋么,將一些步驟延遲到子類中實現(xiàn)撼短。模板方法讓子類能夠在不改變算法結(jié)構(gòu)的前提下粪狼,重新定義算法某些特定的步驟铅歼。
類圖
由類圖中可以看出模板方法模式使用了繼承。
- AbstractClass: 在抽象類中定義了一系列基本操作(PrimitiveOperation)泡嘴,這些操作可以是具體的也可以是抽象的,每一個操作對應(yīng)算法的一個步驟,在其子類中可以重新定義這些步驟溃槐。同時,在抽象類中實現(xiàn)了一個模板方法(TemplateMethod)科吭,用于定義一個算法的框架昏滴。在模板方法中,調(diào)用組織基本操作來搭建算法的框架对人。
- ConcreteClass: 繼承了AbstractClass谣殊,用于實現(xiàn)在父類中聲明的抽象基本操作來完成特定算法的步驟,也可以覆蓋在父類中已經(jīng)實現(xiàn)的具體基本操作牺弄。
模式實現(xiàn)
- 模板方法:一個模板方法是定義在抽象類中的姻几,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。
- 基本方法:基本方法實現(xiàn)算法各個步驟的方法势告,是模板方法的組成部分蛇捌。基本方法可以分成三種:抽象方法(Abstract Method)培慌、具體方法(Concrete Method)和鉤子方法(Hook Method)豁陆。
- 抽象方法:一個抽象方法由抽象類聲明,由其具體子類實現(xiàn)吵护。
- 具體方法:一個具體方法由一個抽象類聲明并實現(xiàn)盒音,其子類可以覆蓋也可以直接繼承。
- 鉤子方法:一個鉤子方法由一個抽象類聲明并實現(xiàn)馅而,而其子類可能會對其進行擴展祥诽,通常在父類中給出的是一個空方法。
與策略模式的區(qū)別
模板方法模式和策略模式所要解決的問題是類似的瓮恭,兩者都可以分離高層的算法和底層的具體實現(xiàn)細節(jié)雄坪。不過模板方法模式使用了繼承來解決問題,而策略模式使用的則是委托屯蹦。此外维哈,策略模式也允許具體實現(xiàn)細節(jié)獨立于高層的算法重用,不過要以一些額外的復(fù)雜性登澜、內(nèi)存和運行時間開銷作為代價阔挠。
總結(jié)
- 繼承
- 模板方法定義算法框架
- 子類實現(xiàn)某些特定步驟
- 分離高層算法和底層實現(xiàn)
- 不靈活,算法無法重用(策略模式可以)
參考: