設計原則:
類應該對擴展開放,對修改關閉
我們的目標是允許類容易擴展,在不修改現有代碼的情況下,就可以搭配新的行為。如果能實現這樣的目標,有什么好處呢?這樣的設計具有彈性可以應對改變,可以接受新的功能來應對改變的需求。
在選擇需要被擴展的代碼部分時要小心。每個地方都采用開放-關閉原則,是一種浪費,也沒有必要,還會導致代碼變得復雜而且難以理解。因為這通常會引入新的抽象層次,需要把注意力放在最有可能改變的地方。
設計模式:裝飾者模式
定義:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
裝飾者模式的缺點是會造成設計中又很多的小類。
裝飾者可以透明的插入,但是如果有些代碼依賴特定的類型,就不應該導入裝飾者
要點:
- 繼承屬于容易擴展的形式之一,但不見得是達到彈性設計的最佳方式
- 在我們的設計中,應該允許行為被擴展,而無需修改現有的代碼
- 組合和委托可用于在運行時動態的加上行為
- 除了繼承,裝飾者模式也可以讓我們擴展行為
- 裝飾著模式意味著一群裝飾者類,這些類用來包裝具體組件
- 裝飾者類反應出被裝飾組件的類型(事實上他們具有相同的類型),都通過接口和集成實現
- 裝飾者可以在被裝飾者的行為前面與/或加上自己的行為,甚至將被裝飾者的整個行為取代掉,而達到特定的目的
- 你可以用無數的裝飾者包裝一個組件
- 裝飾者一般對組件的客戶是透明的,除非客戶程序依賴于組件的具體類型
- 裝飾者會導致設計中出現許多小對象,如果過度使用,會讓程序變得很復雜