實現模式 Kent Beck

2021-09-26 08:19:02 字數 2191 閱讀 9904

最近在學習熊節老師的tdd實戰營,大師特意推薦的一本提公升程式設計技能的書。10年前的著作,今天讀來還是感同身受,可見本書所傳承的價值觀、原則和77種實現模式,對於今日的開發人員,仍然具有指導作用。

序言中通過對什麼是好的**下了乙個定義。所謂好的**,除了其他所有要求之外,比如可以工作的、效能良好的、沒有bug的**,還應該清晰準確地傳達寫作者的想法。

martin fowler在《重構:改善既有**的設計》中說:「任何乙個傻瓜都能寫出機器能懂的**。好得程式設計師應該寫出人能懂的**」。

steve mcconnell在《**大全》中說:「不要過早優化,但也不要過早劣化」。

這本書將告訴如何在幾乎不引入任何額外成本的前提下避免一些常見的低階錯誤————它們是常見的,因為幾乎每個人都犯過並且還在泛著這些錯誤。

不僅為自己程式設計、也你的cpu老弟程式設計,也為其他人程式設計。

本書的目標是幫助讀者通過**表達自己的意圖。

用**來溝通有幾個步驟:

必須在程式設計時保持清醒。能清楚地解釋為類似「這個方法為什麼被呼叫」,「那塊**為什麼屬於這個物件」之類的問題。

承認他人的重要性。不要以自我為中心,應該學會關心其他人,這樣才能寫出能與他人溝通的**。

使用本書的實現模式,更有目的地程式設計,為他人程式設計。

設計決策無法復用,但大多數程式都遵循一組簡單的法則:

沒有「完工」一說。修改程式的投入會遠大於最初編寫程式的投入。

程式都由一組基本的語句和控制流概念組合而成。

程式的閱讀者需要理解程式————既從細節上,也從概念上。有時他們從細節開始,逐漸理解概念;有時他們從概念開始,逐漸理解細節。

而模式就是基於這些共性的法則,可以借鑑這些模式,但不要盲目效仿,因為思考和實踐自己的風格並在團隊中討論交流其實更有效。

模式最大的作用就是幫忙人們做決定。使用模式可以幫助程式設計師用更合理的方式來解決常見問題,從而把更多的時間、精力和創造力用來解決真正獨一無二的問題。

**是寫給人看得,需要具備溝通的功能。

簡單更多地體現實現的思路,更具備可讀性、可擴充套件性。

靈活是衡量那些低效**與設計實踐的一把標尺。

價值觀有普遍的意義,但往往難以直接應用;模式雖然可以直接應用,卻是針對特定場景的;原則在價值觀和模式之間搭建了橋梁。在沒有模式可以應用,或者兩個相互排斥的模式可以同時應用的場合,如何把程式設計原則弄清楚,對解決疑難會是一件好事。在面對不確定性的時候,對原則的理解可以創造出一些東西,同時能和其他的實踐保持一致,而且結果一般很不錯。

組織**結構時,要保證變化只會產生區域性化影響。也就是常說的高內聚、低耦合。

避免複製**,將程式拆分為更小的**片段----小段程式、小段方法和小型物件、小型包。

將邏輯和邏輯所處理的資料放在同一方法、物件或者包中,就是為了在修改**時,降低影響的範圍。

程式中很多時候會存在類似add()和remove(),input和output()等方法。

乙個缺少對稱性的例子:

void process()
可以修改為:

void process()
但這依然違反了對稱性。input和output操作都是通過方法意圖來命名的,但incrementcount()這個方法卻以實現方式來命令。在追求對稱性的時候,應該考慮為什麼會增加這個數值,這樣就可以重新命名為tally().

盡可能宣告式地表達意圖。

將相同變化率的邏輯、資料放在一起;把具有不同變化率的邏輯、資料分離。即穩定和變化分離。比如乙個物件中所有成員變數的變化率應該大多是相同的。只會在乙個方法的生命週期內修改的成員變數應該是區域性變數,兩個同時變化但又和其他成員的變化步驟不一致的變數應該屬於某個輔助物件。

變化率也是時間維度的對稱。

良好的程式設計習慣和實現模式,可以降低開發、測試、維護的成本,提公升經濟效益。

本章主要介紹了下列模式:

物件封裝了行為和狀態,前者被暴露給外部世界,字尾則為前者提供支援。

public  void displayshape(shape subject, brush brush)
可以利用多型,在執行時動態地選擇實現,提高了靈活性。

簡單講解array、iterable、collection、list、set、map的注意事項和實現機制。

從框架開發者和使用者的角度講解改進框架。

讀KentBeck的實現模式《英文版》 個人總結

我在讀實現模式英文版的時候,總感覺作者在教讀者思考問題的方法,寫 的方法。怎麼樣才能不破壞現有的 結構,在增加新的變化的同時,又能保留現有 結構的變化空間。在這本書裡提到了命名,物件導向中的繼承,多型,介面,資料和程式結構等的綜合作用,以及小的模式的使用等。使得程式開發變成了比較靈活,可交流的一件工...

實現設計模式 工廠模式

工廠模式將建立物件的 從客戶 中分離,提供了一種在大系統中管理建立眾多物件的有效方法。當從配置檔案或流中建立物件時,經常採用這種模式。這裡提供一種通用實現,可以作為參考。include include namespace factory private allocator m allocate te...

實現設計模式 享元模式

享元模式其實類似於物件池。如果系統中有大量的細粒度物件,建立這些物件是不小的開銷。如果能共享和反覆使用這些物件,那麼就可以減少物件數量,提高系統效能。下面實現了乙個享元工廠,可以作為參考。include include namespace dp t get const param param ret...