从招式与内功谈起——设计模式概述(三)
3.設(shè)計模式有什么用
????? 下面我們來回答最后一個問題:設(shè)計模式到底有什么用?簡單來說,設(shè)計模式至少有如下幾個用途:
????? (1) 設(shè)計模式來源眾多專家的經(jīng)驗和智慧,它們是從許多優(yōu)秀的軟件系統(tǒng)中總結(jié)出的成功的、能夠?qū)崿F(xiàn)可維護(hù)性復(fù)用的設(shè)計方案,使用這些方案將可以讓我們避免做一些重復(fù)性的工作,也許我們冥思苦想得到的一個“自以為很了不起”的設(shè)計方案其實就是某一個設(shè)計模式。在時間就是金錢的今天,設(shè)計模式無疑會為有助于我們提高開發(fā)和設(shè)計效率,但它不保證一定會提高。
????? (2) 設(shè)計模式提供了一套通用的設(shè)計詞匯和一種通用的形式來方便開發(fā)人員之間溝通和交流,使得設(shè)計方案更加通俗易懂。交流通常很耗時,任何有助于提高交流效率的東西都可以為我們節(jié)省不少時間。無論你使用哪種編程語言,做什么類型的項目,甚至你處于一個國際化的開發(fā)團(tuán)隊,當(dāng)面對同一個設(shè)計模式時,你和別人的理解并無二異,因為設(shè)計模式是跨語言、跨平臺、跨應(yīng)用、跨國界的。
????? (3) 大部分設(shè)計模式都兼顧了系統(tǒng)的可重用性和可擴(kuò)展性,這使得我們可以更好地重用一些已有的設(shè)計方案、功能模塊甚至一個完整的軟件系統(tǒng),避免我們經(jīng)常做一些重復(fù)的設(shè)計、編寫一些重復(fù)的代碼。此外,隨著軟件規(guī)模的日益增大,軟件壽命的日益變長,系統(tǒng)的可維護(hù)性和可擴(kuò)展性也越來越重要,許多設(shè)計模式將有助于提高系統(tǒng)的靈活性和可擴(kuò)展性,讓我們在不修改或者少修改現(xiàn)有系統(tǒng)的基礎(chǔ)上增加、刪除或者替換功能模塊。如果一點設(shè)計模式都不懂,我想要做到這一點恐怕還是很困難的。
????? (4) 合理使用設(shè)計模式并對設(shè)計模式的使用情況進(jìn)行文檔化,將有助于別人更快地理解系統(tǒng)。如果某一天因為升職或跳槽等原因,別人接手了你的項目,只要他也懂設(shè)計模式,我想他應(yīng)該能夠很快理解你的設(shè)計思路和實現(xiàn)方案,讓你升職無后患之憂,跳槽也心安理得,何樂而不為呢?
????? (5) 最后一點對初學(xué)者很重要,學(xué)習(xí)設(shè)計模式將有助于初學(xué)者更加深入地理解面向?qū)ο笏枷?#xff0c;讓你知道:如何將代碼分散在幾個不同的類中?為什么要有“接口”?何謂針對抽象編程?何時不應(yīng)該使用繼承?如果不修改源代碼增加新功能?同時還讓你能夠更好地閱讀和理解現(xiàn)有類庫(如JDK)與其他系統(tǒng)中的源代碼,讓你早點脫離面向?qū)ο缶幊痰摹安锁B期”。
?
4.個人觀點
??????作為設(shè)計模式的忠實粉絲和推廣人員,在正式學(xué)習(xí)設(shè)計模式之前,我結(jié)合多年的模式應(yīng)用和教育培訓(xùn)經(jīng)驗與大家分享幾點個人的看法,以作參考:
????? ?(1) 掌握設(shè)計模式并不是件很難的事情,關(guān)鍵在于多思考,多實踐,不要聽到人家說懂幾個設(shè)計模式就很“牛”,只要用心學(xué)習(xí),設(shè)計模式也就那么回事,你也可以很“牛”的,一定要有信心。
????? (2) 在學(xué)習(xí)每一個設(shè)計模式時至少應(yīng)該掌握如下幾點:這個設(shè)計模式的意圖是什么,它要解決一個什么問題,什么時候可以使用它;它是如何解決的,掌握它的結(jié)構(gòu)圖,記住它的關(guān)鍵代碼;能夠想到至少兩個它的應(yīng)用實例,一個生活中的,一個軟件中的;這個模式的優(yōu)缺點是什么,在使用時要注意什么。當(dāng)你能夠回答上述所有問題時,恭喜你,你了解一個設(shè)計模式了,至于掌握它,那就在開發(fā)中去使用吧,用多了你自然就掌握了。
????? (3) “如果想體驗一下運用模式的感覺,那么最好的方法就是運用它們”。正如在本章最開始所說的,設(shè)計模式是“內(nèi)功心法”,它還是要與“實戰(zhàn)招式”相結(jié)合才能夠相得益彰。學(xué)習(xí)設(shè)計模式的目的在于應(yīng)用,如果不懂如何使用一個設(shè)計模式,而只是學(xué)過,能夠說出它的用途,繪制它的結(jié)構(gòu),充其量也只能說你了解這個模式,嚴(yán)格一點說:不會在開發(fā)中靈活運用一個模式基本上等于沒學(xué)。所以一定要做到:少說多做。
????? (4) 千萬不要濫用模式,不要試圖在一個系統(tǒng)中用上所有的模式,也許有這樣的系統(tǒng),但至少目前我沒有碰到過。每個模式都有自己的適用場景,不能為了使用模式而使用模式?【怎么理解,大家自己思考】,濫用模式不如不用模式,因為濫用的結(jié)果得不到“藝術(shù)品”一樣的軟件,很有可能是一堆垃圾代碼。
????? (5) 如果將設(shè)計模式比喻成“三十六計”,那么每一個模式都是一種計策,它為解決某一類問題而誕生,不管這個設(shè)計模式的難度如何,使用頻率高不高,我建議大家都應(yīng)該好好學(xué)學(xué),多學(xué)一個模式也就意味著你多了“一計”,說不定什么時候一不小心就用上了。因此,模式學(xué)習(xí)之路上要不怕困難,勇于挑戰(zhàn),有的模式雖然難一點,但反復(fù)琢磨,反復(fù)研讀,應(yīng)該還是能夠征服的。
????? (6) 設(shè)計模式的“上乘”境界:“手中無模式,心中有模式”。模式使用的最高境界是你已經(jīng)不知道具體某個設(shè)計模式的定義和結(jié)構(gòu)了,但你會靈活自如地選擇一種設(shè)計方案【其實就是某個設(shè)計模式】來解決某個問題,設(shè)計模式已經(jīng)成為你開發(fā)技能的一部分,能夠手到擒來,“內(nèi)功”與“招式”已渾然一體,要達(dá)到這個境界并不是看完某本書或者開發(fā)一兩個項目就能夠?qū)崿F(xiàn)的,它需要不斷沉淀與積累,所以,對模式的學(xué)習(xí)不要急于求成。
????? (7) 最后一點來自GoF已故成員、我個人最尊敬和崇拜的軟件工程大師之一John Vlissides的著作《設(shè)計模式沉思錄》(Pattern Hatching Design Patterns Applied):模式從不保證任何東西,它不能保證你一定能夠做出可復(fù)用的軟件,提高你的生產(chǎn)率,更不能保證世界和平。模式并不能替代人來完成軟件系統(tǒng)的創(chuàng)造,它們只不過會給那些缺乏經(jīng)驗但卻具備才能和創(chuàng)造力的人帶來希望。
?
|
本文轉(zhuǎn)自:http://blog.csdn.net/lovelion/article/details/7420866
總結(jié)
以上是生活随笔為你收集整理的从招式与内功谈起——设计模式概述(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android UI设计 下拉菜单Spi
- 下一篇: 幻14 2021 R9 5900HS R