以小說的筆法寫的設計模式系列文章,你絕對看得懂![首發於公衆號:"聊聊代碼"]編程
設計模式系列·王小二需求歷險記(一)
設計模式系列·王小二需求歷險記(二)
設計模式系列·封裝、繼承、多態
設計模式系列·初探設計模式之王小二的疑問
設計模式系列·Facade模式之MVC的煩惱
設計模式系列·Adapter 模式之如何優雅的使用別人的輪子
設計模式系列·類爆炸之Bridge模式
設計模式系列·工廠方法模式之 Code Review
設計模式系列·抽象工廠模式設計模式
------華麗的分割線------post
開發了一個月的項目,終於要上線了!王小二和同事們正在爲今晚的上線作最後的準備。學習
萬事俱備,只欠東風。由於項目是與D公司合做開發的,D公司上線過程當中出了問題,因此王小二他們也沒有辦法,只能等着了。設計
1個小時...2個小時...5個小時過去了,你們都睡過去了。「叮鈴鈴...叮鈴鈴...」,一陣刺耳的鈴聲響起,原來是C哥的鬧鈴。3d
小二看看錶,凌晨4點了。此時睡意全無,去找C哥聊聊天吧!cdn
「C哥,你鬧鈴怎麼凌晨4點就響了?」
「哈哈,你見過凌晨四點的北京嗎?」 對象
小二頓時充滿敬意,原來大牛都這麼努力,本身還有什麼理由不奮鬥呢?說學就學,再向C哥學幾招。blog
「C哥啊,真是佩服你。上次你給我講的面向對象,受益不淺!」
"對,面向對象有不少優點,但你更應該深刻的瞭解設計模式,這纔是王道。"繼承
「設計模式,一直聽人說,可是不怎麼了解,C哥你能給我講講嗎?」
「好,閒着也是閒着,我就給你大致講講吧!」
[圖:凌晨四點的北京]
「C哥,我有一個疑問。有人說我應該先把面向對象學好了以後再學設計模式。是否是如今接觸設計模式有點早啊?」
「以個人經驗來看,事實恰好相反。面向對象與設計模式一塊兒學,能夠大大提升你對面向對象的理解,由於設計模式與面向對象是相輔相成的。就如你吃飯時,米飯與菜同樣,不能只吃米飯不吃菜吧?得一塊吃。」
「小二啊,你知道嗎?設計模式,最初來源於建築學。」
「什麼?建築學?原來萬事萬物都有聯繫啊!」小二眼睛瞪得圓圓的。
「是啊。那我給你講講設計模式與建築學的淵源吧。」
Long long ago,一名建築師自問:「建築的質量能夠衡量嗎?能夠客觀評價嗎?」也就是說,建築的設計美觀與否、優秀與否,有沒有客觀的根據呢?有沒有一個模式去衡量呢?
爲了研究這個問題,這名建築師觀察了不少建築物,他驚奇的發現:任何建築物,優秀的結構之間總有一些相同之處。
隨着研究的深刻,這名建築師認爲設計不能夠與要解決的問題分離。而他必需要觀察出來解決相同問題的不一樣設計。
經過這樣的方式---觀察解決相同問題的不一樣設計,縮小了他的關注焦點,他能夠洞悉優質設計之間的類似之處。他把這些類似之處稱爲模式。
最後,他給模式下了一個定義:「在某一情景下的問題解決方案」。
C哥繼續說道:「每種模式,你均可以無數次使用。用來解決咱們重複遇到的這些問題。」
「哦哦,設計模式還挺有用的,若是掌握了設計模式,那我就能夠解決不少通用的問題了。」
「是的。慢慢的,有人發現,能不能將建築學的模式應用到軟件開發呢?」
「我以爲確定能夠啊。軟件開發中有不少不斷重複出現的,但能夠用相同方式去解決的問題。」王小二答道。
「嗯嗯,不錯嘛小二。確實,你們認識到了這點後,不少人從事設計模式研究的工做。其中有四我的,他們寫了一本書,書中共收錄了23種設計模式,這對設計模式在軟件開發中的應用產生了深遠影響,你們都稱他們爲四人團」。
「小二,說了這麼多,你絕的咱們爲何要學習設計模式呢?」
小二答道:我以爲吧,主要有2點:
「嗯,你說的沒錯。但還有更重要的一點,你沒說到。」
「什麼啊?還有其餘用處?」
「學習設計模式,能夠給你一個更高層次的視角去分析、解決問題,避免過早的陷入處理細節的困局。「
」有點不太明白...「
"由於面對問題,不少人會過早的去考慮實現程序的細節,但這每每會模糊了真正的問題。而設計模式,就能幫你去走出這樣的思惟困局,面對問題,你會站在一個更高的層次去考慮如何設計。更能清晰的去面對問題,也就能有更好的解決方案。雖然仍是有點抽象,之後慢慢體會就知道了。"
」哦哦,確實是這樣啊,我慢慢體會吧。「
」小二,你知不知道,四人團針對建立優秀面向對象的設計提出了一些策略?「
」真的嗎?什麼策略「。
他們說的3點很重要:
不知不覺中,過去了2個小時,已經凌晨6點了,D公司也解決了問題。
能夠上線了,不出意料,上線過程很順利。
終於能夠回家睡覺了!
更多精彩,請關注公衆號「聊聊代碼」,讓咱們一塊兒聊聊「左手代碼右手詩」的事兒。