天天看點

設計模式--政策模式

模拟鴨子項目:

不使用設計模式的方案:

傳統繼承方式如下:

鴨子超類:

GreenHeadDuck繼承Duck :

同理可有RedHeadDuck等子類

應對新的需求,看看這個設計的可擴充性

1)添加會飛的鴨子

繼承方式解決方案是:

問題來了,這個Fly讓所有子類都會飛了,這是不科學的。

繼承的問題:對類的局部改動,尤其超類的局部改動,會影響其他部分。影響會有溢出效應

繼續使用繼承方式解決方案是(覆寫父類方法):

又有新需求,石頭鴨子,填坑(每個子類都要覆寫父類的方法):

超類挖的一個坑,每個子類都要來填,增加工作量,複雜度O(N^2)。不是好的設計方式

需要新的設計方式,應對項目的擴充性,降低複雜度:

1)分析項目變化與不變部分,提取變化部分,抽象成接口+實作;

2)鴨子哪些功能是會根據新需求變化的?叫聲、飛行...

用政策模式來解決新需求

接口:

好處:新增行為簡單,行為類更好的複用,組合更友善。既有繼承帶來的複用好處,沒有挖坑

重新設計的鴨子項目:

綠頭鴨、石頭鴨:

政策模式:分别封裝行為接口,實作算法族,超類裡放行為接口對象,在子類裡具體設定行為對象。原則就是:分離變化部分,封裝接口,基于接口程式設計各種功能。此模式讓行為算法的變化獨立于算法的使用者。

經驗:多用組合來實作設計。

更詳細的解釋參考

繼續閱讀