下面就針對上面舉的例子簡單介紹一下模板方法的具體用法
public
class
order
public integer getamount()
public
void
setamount
(integer amount)
public bigdecimal getprice()
public
void
setprice
(bigdecimal price)
public string getpaychannel()
public
void
setpaychannel
(string paychannel)
}
首先定義乙個訂單類,只有這個例子需要的幾個屬性
public
abstract
class
basepay
//真實付款
protected
abstract
boolean
realpay
(bigdecimal totalprice)
;private bigdecimal calculatetotalprice
(order order)
}
這裡定義模板方法的抽象類,定位支付任務的執行步驟。第一步計算總價,第二步發起支付。第一步計算總價實現都是一樣的,所以抽象類也可以說是基類直接實現,第二步不同的支付方式具體實現不一樣,所以定義為抽象方法,由具體支付方式實現。
public
class
alipay
extends
basepay
}public
class
wxpay
extends
basepay
}
public
class
orderservice
private
static
boolean
payorder
(order order)
private
static
void
paychannelinit()
}
定義不同的訂單實體,然後根據訂單的支付渠道這個屬性獲取對應的支付方式,然後支付訂單。如果這時候再接入乙個銀聯支付,實現也很簡單,也不用改動原來的**,增加乙個銀聯支付的實現類,加入支付渠道的集合中就可以了,這裡也充分體現了開閉原則,對擴充套件開發,對修改關閉。銀聯實現如下
public
class
unionpay
extends
basepay
}
java設計模式3 模板方法
定義 模板方法模式定義了乙個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法 的結構即可重定義該演算法的某些特定步驟。public abstract class personday 將行為的具體實現延遲到子類中完成,達到不同的實現效果。public abstract...
設計模式筆記3 模板方法
設計模式的應用不宜先入為主,一上來就使用設計模式是設計模式的最大誤用 沒有一步到位的設計模式,敏捷軟體開發提倡的是 refactoring to patterns 定義乙個操作中的演算法的骨架 穩定 而將一些步驟延遲 變化 到子類中。template method使得子類可以不改變 復用 乙個演算法...
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...