本專欄內容均引用《大話設計模式》並做適當修改, 起因 有部分電腦專業的學生或有一定經驗的在職開發者,他們都知道類、方法、構造方法、甚至抽象類、介面等概念,並用各種IDE寫過不少的Windows或Web程式,但是當問到為什麼要用面向對象,它的好處在哪裡,卻沒有人能完整的講出來,多數人的反應是,概念知 ...
本專欄內容均引用《大話設計模式》並做適當修改,
起因
有部分電腦專業的學生或有一定經驗的在職開發者,他們都知道類、方法、構造方法、甚至抽象類、介面等概念,並用各種IDE寫過不少的Windows或Web程式,但是當問到為什麼要用面向對象,它的好處在哪裡,卻沒有人能完整的講出來,多數人的反應是,概念知道的,就是表達不清楚。
針對於此,在第一章中,將會以中國古代四大發明中活字印刷的例子,通過一個虛構的三國曹操作詩的情景,把面向對象的幾大好處講解一下,這樣比直接告訴面向對象有什麼好處更加容易理解和記憶
本專欄讀者
雖然本轉來不是給無任何編程經驗的人看的,對於想入這一行的朋友來說,找一門編程語言,從頭開始或許才是正道,而此專欄也不太適合有了多年面向對象開發經驗,對於常用的設計模式瞭如指掌的人看的,畢竟這裡更多的是一些基礎的東西
本專欄閱讀方法
建議按順序閱讀,如果您感覺由於面向對象知識的匱乏,例如對繼承、多態、介面、抽象類的理解不足,造成閱讀上的困難,不妨先閱讀附一的“培訓實習生——面向對象基礎”部分,然後再從第1章開始閱讀。如果您已經對不少設計模式熟悉,也不妨挑選不熟悉的模式章節閱讀。
關於本專欄的疑問解答
- 本書需要什麼基礎?
主要是C#或其他編程語言的基礎知識,如變數、分支判斷、迴圈、函數等編程基礎,關於面向對象基礎可參看本書的附錄一。
- 設計模式是否有必要全部學一遍?
答案是,Yes!別被那些說什麼設計模式大多用不上,根本不用全學的輿論所左右。儘管現在設計模式遠遠不止23種,對所有都有研究是不太容易的,在學習總結的23個設計模式過程中,你會被那些編程大師們進行偉大的技術思想洗禮,不斷增加自己對面向對象的深入理解,從而更好的把這種思想發揚光大。這就如同高中時學立體幾何感覺沒用,但當你裝修好房子購買傢俱時才知道,有空間感,懂得空間計算是如何的重要,你完全可能遇到買了一個大號的冰箱卻放不進廚房,或買了開關門的衣櫥(移門不占空間)卻因床在旁邊堵住了門而打不開的尷尬。
重要的不是你將來會不會用到這些模式,而是通過這些模式讓你找到“封裝變化”、“對象間鬆散耦合”、“針對介面編程”的感覺,從而設計出易維護、易擴展、易復用、靈活性好的程式。成為詩人後可能不需要刻意地按照某種模式去創作,但成為詩人前他們一定是認真地研究過成百上千的唐詩宋詞、古今名句。
如果說,數學是思維的體操,那設計模式,就是面向對象編程思維的體操。
- 我學了設計模式後時常會過度設計,如何辦?
建議,暫時現象,繼續努力。
設計模式有四境界:
1.沒學前是一點不懂,根本想不到用設計模式,設計的代碼很糟糕;
2.學了幾個模式後,很開心,於是到處想著要用自己學過的模式,於是時常造成誤用模式而不自知;
3.學完全部模式時,感覺諸多模式極其相似,無法分清模式之間的差異,有困惑,但深知誤用之害,應用之時有所猶豫;
4.靈活應用模式,甚至不應用具體的某種模式也能設計出非常優秀的代碼,以達到無劍勝有劍的境界。
不會用設計模式的人要遠遠超過過度使用設計模式的人,從這個角度講,因為怕過度設計而不用設計模式顯然是因噎廢食。當你認識到自己有過度使用模式的時候,那就證明你已意識到問題的存在,只有通過不斷的鑽研和努力,你才能突破“不識廬山真面目,只緣身在此山中”的瓶頸,達到“會當凌絕頂,一覽眾山小”的境界。
編程語言
本專欄所使用的語言均為JAVA,但也同樣適用其他一些面向對象語言的讀者閱讀來學習設計模式