再讀《設計模式解析》

2021-08-20 12:58:37 字數 2445 閱讀 1369

前言:應部門架構師的建議,今年5月再次閱讀了該書,確實又有了新的收穫,從全域性有了更清晰的認識,也讓自己體會到該如何去分析、解決問題。建議讀本書時,能夠去觀察到作者編寫該書時的思路,有利於我們更深層次的理解設計模式的本質。

第1部分:物件導向軟體開發簡介

該部分以更獨特的觀點闡述了作者關於物件導向的理解。針對類、封裝、繼承、多型等物件導向術語進行了更本質的描述。讀完後有種醍醐灌頂的感覺。

類:根據物件所具有的責任定義物件的型別。責任可以分為行為、狀態,這些分別是由方法/資料實現的。

封裝:任何形式的隱藏。

功能分解是常用的程式設計方式,將乙個問題逐漸分解為更小功能的方法,直到每個功能點可以管理。解決更小的問題比解決整個問題要更簡單,但需求變更始終伴隨著整個軟體的開發周期。如果不能進行很好的功能分解、未來需求的**、變化點封裝,將極易產生低內聚、高耦合的**,這樣的**是很難維護的。

第2部分:傳統物件導向設計的侷限

作者在按照幾個步驟介紹了cad/cam系統:提取需求資訊、了解專業術語的必要性、問題描述、挑戰及解決方案。

通過標準的物件導向解決方案,作者進行了第一版設計,描述了傳統物件導向設計開發中存在的問題:沒必要的繼承層次結構,這種結構往往是緊耦合而且低內聚的,以及類**(未來發生變化時會出現),過分依賴繼承帶來超出正常的維護成本。

第3部分:設計模式

設計模式是在某一背景下某個問題的一種解決方案。它們絕不只是解決某個個別問題的模板,它們是描述冬季的一種方式,不僅包括我們要得到的效果,也包括困擾我們的問題。

學習設計模式的理由:①對不斷重複出現的問題,復用既有的、高質量的解決方案;②確立通用的術語,改善團隊內的溝通;③提公升思考層次;④判斷設計是否正確,而不僅僅是能夠奏效;④改善個人學習和團隊學習;⑤提高**的可修改性和可維護;⑥採用更佳設計方案,即使沒有明確使用模式;⑦發現巨型繼承層次結構的替代方案;

傳統上看待物件、封裝和繼承的方式有很大侷限性。封裝的存在絕不僅僅是為了隱藏資料。將其定義擴充套件為「任何形式的隱藏」之後,可以用封裝來建立物件之間的層——這樣就可以對位於層一側的內容進行修改而不造成影響。將繼承看做對概念上相同的各個具體類的處理方法,比看成一種特化方法,要合理的多。

用共性和可變性分析在我們的問題領域尋找物件,比尋找名詞和相應的動作更加有效。

敏捷方法、極限程式設計、測試驅動開發等能產生許多較好的**品質,這些品質與設計模式所帶來的品質是一樣的,都是殊途同歸——高內聚、松耦合、可讀性、可測試性等。

第4部分:組合起來:用模式思考

設計中需要減少腦子裡思考的事情,優先考慮物件與物件之間的關係,而不是如何去建立他們。先考慮系統中需要什麼,然後再去關注如何建立他們。

傳統設計方法往往由部分到整體,但這樣很難真正產生符合整體問題背景的設計,通常只見樹不不見林,因為注意力過分集中在系統的細節上。在設計決策時,常常限於細節之中,而忘記了系統更大的背景。細節會時我們注意力放在小而且區域性的決策上,它會成為遮蔽更大的總體概念的浮雲。

模式為我們提供了一種語言,使我們能夠超越於細節之上,以實際的方式討論背景。這樣使我們更可能看到問題域中的約束因素。用模式思考,通過學習按背景設計(尋找為其他模式提供背景、約束的最高層模式,並不斷迴圈該步驟尋找下一層次的模式,找到適合整體的設計),有助於吸取前人的經驗教訓,有助於建立健壯、可維護而且有生氣的系統。

第5部分:邁向新的設計方式

該部分講述了一種新的設計方式,不同於特殊化,也不同於尋找問題域中名詞和動詞的方式。主要討論了從模式中獲得的經驗來設計應用程式架構,主要講述的是功能上的變化的處理方式。

不要隨意套用、濫用設計模式,要從背景設計,在類中封裝變化。模式實現的具體方式應該由問題的本質、約束條件和需求等等決定,而不是根據你再某本模式書中碰巧看到的某個實現。

試圖確定所有可能的變化通常並不能獲得更好的系統,這樣往往一事無成,這就是所謂的分析癱瘓。

闡述了如何使用cva(共性和可變性分析)建立應用程式的高層設計。通過先定義共性,消除了特殊情況之間的耦合。因為設計模式的本質實際上就是隔離變化和共性,這與共性和可變性分析異曲同工。

使用分析矩陣進行問題域的分析

第6部分:邁向新的設計方式

該部分主要說明,在功能之外可能出現的不同變化型別,擴充套件模式封裝變化的概念。

第7部分:各種工廠模式

工廠模式可以幫助物件的建立。但是這可能並非它們最重要的作用。換乙個新角度,會發現更多的作用:將物件的使用與物件的構造和管理分離開來。

使用設計模式,會建立許多可擴充套件的類。如果管理這些物件,正是工廠的用武之地,稱工廠為「物件管理者」更合適。

第8部分:終點與起點

該部分主要對書中的核心觀點進行了總結,包含物件導向的原則及新視角,設計模式如何封裝實現,共性和可變性分析與設計模式,按責任劃分問題域(問題分解),模式和從背景設計,模式內部的關聯,設計模式與敏捷程式設計殊途同歸,如何更好的學習設計模式。

再讀大話設計模式 簡單工廠感悟

時隔一年多因為我們需要把mybatis替換成jpa,我再次開啟設計模式這本書。本來我打算粗讀一下三個工廠,來回憶一下三個工廠模式,然後開發 但是鬼使神差之下,我逐字讀了起來。再次閱讀,心境不再是對計算機的懵懂,而是包含著這幾年對開發過程中 的理解和諸多感悟。單從簡單工廠看起,就收穫頗豐。簡單工廠中講...

設計模式解析

在之前的學習中初步的了解了基本設計模式,但是在使用方面很多地方考慮的不夠仔細,經驗方面也有很多不足之處。現在正好利用一些時間把設計模式重新整理一下。先列一下基本設計模式的知識點 1 物件導向的六大原則 2 基本設計模式 建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 build...

解析設計模式

區分fa ade模式 adapter模式 bridge模式與decorator模式。fa ade模式注重簡化介面,adapter模式注重轉換介面,bridge模式注重分離介面 抽象 與其實現,decorator模式注重穩定介面的前提下為物件擴充套件功能 23種常見的設計模式 建立型factory m...