物件
傳統看法:具有方法的資料(從實現的視角來看待物件,太簡單,太膚淺了);
新看法:具有責任的實體。這些責任定義了物件的行為(從概念視角出發)。
關注動機而非實現,使設計模式中反覆出現的主題,因為將實現隱藏在介面之後,實際上是將物件的實現與使用它們的物件解耦了。
封裝封裝不僅僅是資料隱藏;封裝應該被視為「任何形式的隱藏」,可以是隱藏資料,但還可以隱藏實現細節,派生類設計細節,例項化規則。
設計模式用繼承對行為進行分類。
發現變化並將其封裝。
考慮你的設計中哪些地方可能變化。這種方式與關注會導致重新設計的原因相反。它不是考慮什麼會迫使你的設計改變,而是考慮你怎樣才能夠在不重新設計的情況下進行改變。這裡的關鍵在於封裝發生變化的概念,這是許多設計模式的主題。
很多設計模式都使用封裝在物件之間建立層。這樣設計者可以在層的兩側進行修改,而不會對另一側產生不良影響。這有利於兩側的松耦合。
當乙個類處理越來越多的不同變化(比如通過開關變數)時,**的內聚性就會變地很差。也就是說,它所處理的特殊情況越多,可理解性就越差。
用物件處理行為上的變化。用物件的屬性來包含變化,和用物件的行為包含變化其實非常相似。
共性分析尋找的是不可能隨時間而改變的結構,而可變性分析則要找到可能變化的結構。可變性分析只在相關聯的共性分析定義的上下文中才有意義......從架構的視角看,共性分析為架構提供長效的要素,而可變性分析則促進它適應實際使用所需。
如果變化是問題領域中各個特定的具體情況,共性就定義了問題領域中將這些情況聯絡起來的概念。
規約視角與概念視角之間的關係:規約標識了用來處理此概念所有情況(即概念視角所定義的共性)所需的介面。
規約視角與實現視角之間的關係:對於給定的規約,怎樣實現這個特定情況。
敏捷方法要求**具有可變性,而模式能夠產生靈活的**。這只是方法上的不同,而非道之不同。兩種方法都要求**具備同樣的品質,它們只是殊途同歸罷了。
無冗餘:某個規則只在乙個地方實現;乙個規則,乙個地方。
冗餘與耦合之間往往糾纏不清。為避免耦合,**需要封裝在定義明確的介面之後。
《設計模式解析》摘錄(5)
短期的抄近路,可能會在長期導致問題嚴重複雜化。災難往往是由短期未臻最優的決策,長期積累而引起的。許多專案只關心處理眼前的緊迫需求,卻不顧將來的維護。1 針對介面進行程式設計,而不要針對實現程式設計 2 優先使用物件組合,而不是類繼承 3 考慮設計中什麼應該是可以變化的。這種方法與關注引起重新設計的原...
《設計模式解析》摘錄(15)
object pool 模式 關鍵特徵 意圖 在建立物件比較昂貴,或者對於特定型別能夠建立的物件數目有限制時,管理物件的重用。解決方案 在需要乙個 reusable 物件時,client 呼叫 reusablepool 的 acquirereusable 方法。如果池是空的,那麼 acquirere...
《設計模式精解》書評摘錄
我買這本書英文本版。這本書比 設計模式 一書容易理解.本書開頭有些章節很精采.bridge 模式講很好。正在看,感覺對設計模式的講解深入淺出,非常適合我等初窺設計模式門徑的人。我花了一周的空餘時間,讀完了此書 如果讓我讀英文原版,恐怕要2周,而且收穫恐怕也不會像現在一樣深刻 感覺書非常適合剛剛學習 ...