《head first設計模式》——設計模式入門的最優選擇

《head first設計模式》——設計模式入門的最優選擇

今天讀完了《head first設計模式》,在這裡推薦給大家。

本書解決什麼問題

當我們在學校做自己的小項目時,可能不到100行的代碼就可以解決大多數的需求。但是當公司遇到了較大型的項目時,代碼量將會增長到一個較大的量級。如果不能以科學有效的方式管理代碼,很快代碼就會變得冗餘不堪。這個時候如果需要新加一個需求,就會發現代碼修改起來非常困難:可能為了新加一個功能就要改寫好幾處的代碼,稍不留神就會引入新的bug。於是就會經常性的進入半小時寫代碼,三小時debug的節奏,這會極大地限制自己的工作效率。這時候如何將代碼寫的比較優雅易維護就是我們必須要做的一件事了。

將代碼寫的容易維護,一方面是要遵從一定的代碼規範,讓代碼變得可讀;另一方面是要利用面嚮對象語言的一些特性,使用一些模塊化的方式將代碼更好的組織起來。而這種科學的代碼組織方式,就是設計模式。

事實上,已經有四位非常厲害的同志早在1995年就總結出了非常好用的一套設計模式,大名鼎鼎的《設計模式》就是出自他們四人之手。他們四個人,更為大家熟悉的名字是四人組,或者GoF(Gang of Four)。

《head first設計模式》——設計模式入門的最優選擇

經典四人組所著《設計模式》(豆瓣截圖)

但是這本書有點略微晦澀,對於非計算機專業的(比如我)不是特別友好,於是選擇了另外一本更為友好的書,也是我們今天的主角:《Head First設計模式》。Head First實際上是一個系列,特點是採用大量的和內容貼切的插圖、對話來進行輔助講解,形象而不失生動的講解內容。而《Head First設計模式》可謂完美的繼承了這個特點,將枯燥的設計模式講解的十分生動,令人慾罷不能。

《head first設計模式》——設計模式入門的最優選擇

本書所涉及的設計模式,有基本的原理,同時也有簡單但不失深刻的代碼實現。雖然它的代碼都是由java完成的,但用到的java語言本身的特性並不多,對於只懂python的我來說也基本上能讀懂八九成。如果大家有志於從事代碼相關崗位,十分推薦大家讀一下本書。

讀完這本書你將收穫什麼:

知道一些常用的設計模式,換句話說是代碼的模塊化技巧。這會讓你的代碼能夠保持簡單且具有彈性。我老闆有句名言:如果你想讓你的代碼使用多次,可拓展,可維護,那就先把你的代碼模塊化設計好。否則,大概率你的代碼日後可能只會使用一次。

這本書不會提高你的代碼基礎。如果你還沒有搞懂面向對象中的繼承和多態,那就先搞明白他們再來閱讀這本書。

本書的主要內容

簡要的列舉一下本書涉及到的主要的內容。更細節的東西還是需要大家一度原書才能體會的到。

一些常見的OO (Object Oriented,面向對象)原則

  • 封裝變化
  • 多用組合,少用繼承
  • 針對接口編程,不針對實現編程
  • 為交互對象之間的松耦合設計而努力
  • 類應該對擴展開放,對修改關閉
  • 依賴抽象,不要依賴具體類
  • 只和朋友交談
  • 類應該只做一件事情

本書涉及到的幾個設計模式:

  • 策略模式:定義了算法族,分別封裝起來,讓他們之間可以互相替換。此模式讓算法的變化獨立於使用算法的客戶。
  • 觀察者模式:在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態,依賴它的對象就會收到通知,並自動更新。
  • 裝飾者模式:動態地將責任附加到對象上。裝飾者模式是有別於繼承的另一種拓展功能的選擇。
  • 工廠方法:定義了一個創建對象的接口,有子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。
  • 抽象工廠模式:提供一個接口,用於創建相關或以來對象的家族,而不需要明確的指定具體類。
  • 單件模式:確保一個類有且僅有一個實例,並提供全局訪問點。
  • 命令模式:封裝請求為一個對象,這可以讓你使用不同的請求,隊列或者日誌請求來參數化其他對象。
  • 適配器模式:將一個類的接口,轉換為客戶希望的另一個接口。
  • 模板方法模式:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
  • 迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。
  • 組合模式:允許你將對象組成樹形結構來表現“整體/部分”的層次結構。組合能讓客戶以一致的方式處理個別對象和對象的組合。
  • 狀態模式:允許對象在內部狀態狀態改變它的行為,對象看起來好像修改修改了它的類。
  • 代理模式:為來一個對象進行一種包裝,以控制對此對象的訪問
  • 複合模式:本質上是其他模式的綜合,形成一種解決方案,用以解決一種一般性問題。本書中舉了MVC框架作為這一模式的例子。


分享到:


相關文章: