模板方法模式(TemplateMethod) 简介
模板方法模式是一個相當(dāng)簡單的模式.
可能1個完全不懂設(shè)計模式的程序猿在不知不覺間也多次使用了它.
我們先看看定義.
一.模板模式(TemplateMethod) 的定義.
所謂模板方法模式, 就是定義1個操作中的算法的骨架, 而將一些步驟延遲到子類中. 模板方法使得子類可以不改變1個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟.
看了這么多設(shè)計模式的定義, 這次終于是寫的比較通俗易懂了.
簡單來講,
模板方法模式把1個算法分成若干個步驟,??? 但是把這些步驟方法設(shè)為抽象方法,? 讓它們在子類中重寫.
這就有1個前提, 這個算法必須能嚴(yán)格分割成若干個步驟哦.
二. 洗衣機洗衣服的例子.
我們還是舉個例子來講.
洗衣機類 WashingMachine:
洗衣機最重要的方法就是洗衣服了(washing).
這個過程可以分成三個步驟
1. 進水 (inflow)
2. 清洗 (cleanning)
3. 脫水 (drying)
各種不同的洗衣機可能有不同的進水方法,? 清洗方法 以及 脫水方法.
但是基本上都是可以分成上述三個步驟的.
所以我們可以把代碼寫成這樣.
上面的代碼把三個子步驟寫成抽象方法,
而最終的washing()是非抽象方法.
兩個洗衣機子類: Siemens 和 Panasonic
兩個洗衣機的子類重寫了抽象類的三個抽象方法:
但是不重寫綜合算法.
public class Panasonic extends WashingMachine {@Overridepublic void inflow() {// TODO Auto-generated method stubSystem.out.println("Panasonic inflow.");}@Overridepublic void cleaning() {// TODO Auto-generated method stubSystem.out.println("Panasonic cleaning.");}@Overridepublic void drying() {// TODO Auto-generated method stubSystem.out.println("Panasonic cleaning.");}}
客戶端代碼:
WashingMachine wm = new Siemens();wm.washing();wm = new Panasonic();wm.washing();輸出:
SIEMENS inflow. SIEMENS cleaning. SIEMENS cleaning. Panasonic inflow. Panasonic cleaning. Panasonic cleaning.可以看出, 上面連個子類, 雖然它們的步驟是完全不同的, 但是它們洗衣服方法的骨架是一樣的.
UML:
三,小結(jié)
這個模式好易明,?? 無非就是把1個復(fù)雜算法拆解, 然后讓不同的子類自己去實現(xiàn)各個步驟.
它只適用于能分解步驟的算法.
子類一般只重寫步驟方法, 不重寫綜合骨架,
一旦子類重寫了骨架, 那么它就不是模板方法(TemplateMethod)模式了.
總結(jié)
以上是生活随笔為你收集整理的模板方法模式(TemplateMethod) 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原型模式(ProtoType) - Ja
- 下一篇: 迪米特法则(Law of Demeter