本筆記內容來自於《Head First設計模式》
首先來看一個例子:
有一個鴨子超類,繼承它的鴨子會有其中的屬性:
但現在,我們要對子類的一些鴨子增加飛(fly)的功能,我們可能會想到直接在超類中添加這個方法:
問題在於:
這時候你可能想到繼承中的覆蓋,即不會飛的鴨子就覆蓋fly()方法,但是覆蓋後fly()方法裏什麼也不做。
但是這樣還是會出現新的問題:
如果有些鴨子既不會呱呱叫也不會飛,那麼豈不是都要覆蓋,這樣每當新的鴨子出現就會要考慮覆蓋,簡直是無窮無盡的噩夢。
那麼,我們再來考慮第二種方法,使用接口:
然而:
從而我們可以得到第一個結論:
現在回到我們的問題本身:
我們希望一切能有彈性,比方說,我們現在要新增一種綠頭鴨,並指定特定類型的飛行行爲給它。
那 麼我們可以乾脆讓鴨子的行爲可以動態的改變好了,怎麼實現呢,使用接口
我們來看看具體行爲類接口的構造:
再來看鴨子:
其實以上所說的設計模式其實就是一種行爲型模式--策略模式。