和許多人一樣,第一次接觸設(shè)計(jì)模式也是從《設(shè)計(jì)模式》開(kāi)始的,在拜讀完這本巨著后,在感到深深的震憾之余,還有一種將這本書(shū)推薦給公司里每個(gè)家伙閱讀的強(qiáng)烈沖動(dòng)??墒菐讉€(gè)頗有面向?qū)ο缶幊棠芰Φ募一飬s告訴我,這本書(shū)太深?yuàn)W、太抽象了,看得叫人感到頭昏眼花、云里霧里。
那時(shí),我除了郁悶還有納悶,郁悶的是這么偉大的書(shū),這些家伙卻一致反映很難看懂,看不懂,還如何從中吸取豐富的營(yíng)養(yǎng),迅速提高軟件設(shè)計(jì)水平,從而提高產(chǎn)品質(zhì)量?納悶的是為什么這些家伙會(huì)一致反映看不懂,而我自己卻沒(méi)有這樣的感覺(jué)呢?后來(lái)通過(guò)和這群家伙交流我才知道,他們不像我那樣擁有豐富的程序設(shè)計(jì)經(jīng)驗(yàn),經(jīng)歷過(guò)的東西太多(我先自吹自擂一番),因此在閱讀這本書(shū)時(shí),從自己過(guò)去眾多的設(shè)計(jì)中挑選出相似的案例來(lái)進(jìn)行對(duì)比,而他們卻很難有這么多的案例去擬合每個(gè)設(shè)計(jì)模式,沒(méi)有“實(shí)物”做參照物,閱讀、理解自然是一個(gè)痛苦而漫長(zhǎng)的過(guò)程。如果我想幫助這群家伙的話(huà),只有“翻譯”這本書(shū),如何“翻譯”?用常見(jiàn)的實(shí)例,用程序員的“語(yǔ)言”來(lái)解釋設(shè)計(jì)模式,而不再使用原著中抽象的。
從那里開(kāi)始呢?首先從回答兩個(gè)問(wèn)題說(shuō)起吧。
第一個(gè)是學(xué)習(xí)設(shè)計(jì)模式從那個(gè)設(shè)計(jì)模式開(kāi)始?
第二個(gè)是我最喜歡那個(gè)設(shè)計(jì)模式?
我認(rèn)為回答第一個(gè)問(wèn)題可以反映出回答者的“心態(tài)”,而回答第二個(gè)問(wèn)題則反映出回答者的“心境.我的答案是,學(xué)習(xí)設(shè)計(jì)模式從“適配器”開(kāi)始,我最喜歡的設(shè)計(jì)模式是“策略”。先說(shuō)反映心態(tài)的“適配器”,程序員在成長(zhǎng)過(guò)程中都有這樣的極其相似經(jīng)歷:在別人寫(xiě)的代碼基礎(chǔ)上繼續(xù),比如完善或者維護(hù)別人寫(xiě)的程序。通常你我做的其實(shí)大同小異,先會(huì)去閱讀已經(jīng)寫(xiě)好的代碼,感覺(jué)差不多了,下步動(dòng)作是什么?60%的人不是開(kāi)始“繼續(xù)的”工作,而是開(kāi)始改寫(xiě)、甚至是重寫(xiě)代碼,還有40%的人是在“繼續(xù)工作”,完成新東西的設(shè)計(jì)后,回頭再來(lái)改寫(xiě)、甚至是重寫(xiě)代碼。我敢打賭,只有不到10%的人會(huì)在別人的基礎(chǔ)上“繼續(xù)”工作。改寫(xiě)、重寫(xiě)的理由是什么,無(wú)非是別人寫(xiě)的太土、太臭,不改寫(xiě)、重寫(xiě),心里不舒服,更“好”的理由是,和我“繼續(xù)”的思路不同,比如接口不兼容,我寫(xiě)不下去,因此只有改寫(xiě),改的太多,我又比較能干,因此干脆重寫(xiě)!
其實(shí)……其實(shí)……下一個(gè)在你工作基礎(chǔ)上繼續(xù)工作的家伙,和你的想法一樣,你一樣土,一樣臭,他一樣比你高明,一樣會(huì)改寫(xiě)、重寫(xiě)你引以為自豪的代碼。唉,就因?yàn)槭擒浖阄铱梢阅玫皆创a,因此你我手才會(huì)癢,才會(huì)有改寫(xiě)、重寫(xiě)的奇怪念頭,想想硬件,自己沒(méi)那個(gè)本事,也沒(méi)有那個(gè)條件去重新設(shè)計(jì)、制造另一個(gè)主板,來(lái)實(shí)現(xiàn)一個(gè)滿(mǎn)足自己需要的接口。每次開(kāi)發(fā)一個(gè)接口卡的時(shí)候,你我還不是老老實(shí)實(shí)按“規(guī)范”去設(shè)計(jì)接口,再按自己的需要做個(gè)“適配”處理?!同樣你有改寫(xiě)API的沖動(dòng)嗎,老實(shí)說(shuō)我經(jīng)常有,我特別討厭win32API的許多接口,羅嗦不說(shuō),還無(wú)法提供我想要的全部功能,麻煩死了。但我改不了,因?yàn)闆](méi)有本事改,也無(wú)法改。老實(shí)說(shuō),那些宣稱(chēng)喜歡linux的家伙,肯定有一堆想“改進(jìn)”linux內(nèi)核的自負(fù)家伙,我就遇到好多好多。那么改寫(xiě)、重寫(xiě)的效果如何呢,老實(shí)說(shuō),我自己有很深的體會(huì),步入管理崗位后體會(huì)更深,客氣點(diǎn)“條條道路通羅馬”吧,心情不佳的時(shí)候“50步笑100步”吧,還不說(shuō)時(shí)間(你總不至于聰明到1秒鐘內(nèi)修改完成吧)、成本(你改寫(xiě)、重寫(xiě)、測(cè)試的那段時(shí)間,你不會(huì)給老板說(shuō)你不要工資吧)了。如果你心平氣和去對(duì)比,你會(huì)發(fā)現(xiàn)我說(shuō)的絕對(duì)一點(diǎn)不夸張、過(guò)分。
說(shuō)了這么一大堆,就是想說(shuō),如果你想提高自己的工作效率,你想做更有意義的事情,你不想重復(fù)去造一個(gè)別人已經(jīng)造好的輪子的話(huà),下次遇到在別人工作基礎(chǔ)上“繼續(xù)”這樣的“美差”的時(shí)候,首先要想到“適配器”設(shè)計(jì)模式,適配器設(shè)計(jì)模式太簡(jiǎn)單了,簡(jiǎn)單到我認(rèn)為不需要說(shuō)什么了,其實(shí)你能否有機(jī)會(huì)使用適配器模式,主要是看你的心態(tài),我相信你一定能掌握他,不就是匹配個(gè)接口嘛。
那時(shí),我除了郁悶還有納悶,郁悶的是這么偉大的書(shū),這些家伙卻一致反映很難看懂,看不懂,還如何從中吸取豐富的營(yíng)養(yǎng),迅速提高軟件設(shè)計(jì)水平,從而提高產(chǎn)品質(zhì)量?納悶的是為什么這些家伙會(huì)一致反映看不懂,而我自己卻沒(méi)有這樣的感覺(jué)呢?后來(lái)通過(guò)和這群家伙交流我才知道,他們不像我那樣擁有豐富的程序設(shè)計(jì)經(jīng)驗(yàn),經(jīng)歷過(guò)的東西太多(我先自吹自擂一番),因此在閱讀這本書(shū)時(shí),從自己過(guò)去眾多的設(shè)計(jì)中挑選出相似的案例來(lái)進(jìn)行對(duì)比,而他們卻很難有這么多的案例去擬合每個(gè)設(shè)計(jì)模式,沒(méi)有“實(shí)物”做參照物,閱讀、理解自然是一個(gè)痛苦而漫長(zhǎng)的過(guò)程。如果我想幫助這群家伙的話(huà),只有“翻譯”這本書(shū),如何“翻譯”?用常見(jiàn)的實(shí)例,用程序員的“語(yǔ)言”來(lái)解釋設(shè)計(jì)模式,而不再使用原著中抽象的。
從那里開(kāi)始呢?首先從回答兩個(gè)問(wèn)題說(shuō)起吧。
第一個(gè)是學(xué)習(xí)設(shè)計(jì)模式從那個(gè)設(shè)計(jì)模式開(kāi)始?
第二個(gè)是我最喜歡那個(gè)設(shè)計(jì)模式?
我認(rèn)為回答第一個(gè)問(wèn)題可以反映出回答者的“心態(tài)”,而回答第二個(gè)問(wèn)題則反映出回答者的“心境.我的答案是,學(xué)習(xí)設(shè)計(jì)模式從“適配器”開(kāi)始,我最喜歡的設(shè)計(jì)模式是“策略”。先說(shuō)反映心態(tài)的“適配器”,程序員在成長(zhǎng)過(guò)程中都有這樣的極其相似經(jīng)歷:在別人寫(xiě)的代碼基礎(chǔ)上繼續(xù),比如完善或者維護(hù)別人寫(xiě)的程序。通常你我做的其實(shí)大同小異,先會(huì)去閱讀已經(jīng)寫(xiě)好的代碼,感覺(jué)差不多了,下步動(dòng)作是什么?60%的人不是開(kāi)始“繼續(xù)的”工作,而是開(kāi)始改寫(xiě)、甚至是重寫(xiě)代碼,還有40%的人是在“繼續(xù)工作”,完成新東西的設(shè)計(jì)后,回頭再來(lái)改寫(xiě)、甚至是重寫(xiě)代碼。我敢打賭,只有不到10%的人會(huì)在別人的基礎(chǔ)上“繼續(xù)”工作。改寫(xiě)、重寫(xiě)的理由是什么,無(wú)非是別人寫(xiě)的太土、太臭,不改寫(xiě)、重寫(xiě),心里不舒服,更“好”的理由是,和我“繼續(xù)”的思路不同,比如接口不兼容,我寫(xiě)不下去,因此只有改寫(xiě),改的太多,我又比較能干,因此干脆重寫(xiě)!
其實(shí)……其實(shí)……下一個(gè)在你工作基礎(chǔ)上繼續(xù)工作的家伙,和你的想法一樣,你一樣土,一樣臭,他一樣比你高明,一樣會(huì)改寫(xiě)、重寫(xiě)你引以為自豪的代碼。唉,就因?yàn)槭擒浖阄铱梢阅玫皆创a,因此你我手才會(huì)癢,才會(huì)有改寫(xiě)、重寫(xiě)的奇怪念頭,想想硬件,自己沒(méi)那個(gè)本事,也沒(méi)有那個(gè)條件去重新設(shè)計(jì)、制造另一個(gè)主板,來(lái)實(shí)現(xiàn)一個(gè)滿(mǎn)足自己需要的接口。每次開(kāi)發(fā)一個(gè)接口卡的時(shí)候,你我還不是老老實(shí)實(shí)按“規(guī)范”去設(shè)計(jì)接口,再按自己的需要做個(gè)“適配”處理?!同樣你有改寫(xiě)API的沖動(dòng)嗎,老實(shí)說(shuō)我經(jīng)常有,我特別討厭win32API的許多接口,羅嗦不說(shuō),還無(wú)法提供我想要的全部功能,麻煩死了。但我改不了,因?yàn)闆](méi)有本事改,也無(wú)法改。老實(shí)說(shuō),那些宣稱(chēng)喜歡linux的家伙,肯定有一堆想“改進(jìn)”linux內(nèi)核的自負(fù)家伙,我就遇到好多好多。那么改寫(xiě)、重寫(xiě)的效果如何呢,老實(shí)說(shuō),我自己有很深的體會(huì),步入管理崗位后體會(huì)更深,客氣點(diǎn)“條條道路通羅馬”吧,心情不佳的時(shí)候“50步笑100步”吧,還不說(shuō)時(shí)間(你總不至于聰明到1秒鐘內(nèi)修改完成吧)、成本(你改寫(xiě)、重寫(xiě)、測(cè)試的那段時(shí)間,你不會(huì)給老板說(shuō)你不要工資吧)了。如果你心平氣和去對(duì)比,你會(huì)發(fā)現(xiàn)我說(shuō)的絕對(duì)一點(diǎn)不夸張、過(guò)分。
說(shuō)了這么一大堆,就是想說(shuō),如果你想提高自己的工作效率,你想做更有意義的事情,你不想重復(fù)去造一個(gè)別人已經(jīng)造好的輪子的話(huà),下次遇到在別人工作基礎(chǔ)上“繼續(xù)”這樣的“美差”的時(shí)候,首先要想到“適配器”設(shè)計(jì)模式,適配器設(shè)計(jì)模式太簡(jiǎn)單了,簡(jiǎn)單到我認(rèn)為不需要說(shuō)什么了,其實(shí)你能否有機(jī)會(huì)使用適配器模式,主要是看你的心態(tài),我相信你一定能掌握他,不就是匹配個(gè)接口嘛。

