資源描述:
《看老外程序員如何向妻子解釋設(shè)計(jì)模式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、看老外程序員如何向妻子解釋設(shè)計(jì)模式-∧︵∧全世界的屋頂∧︵∧-博客頻道-CSDN.NET設(shè)計(jì)模式是什么?設(shè)計(jì)模式是這些原則在某些特定公共場(chǎng)景下標(biāo)準(zhǔn)化的應(yīng)用,接下來(lái)讓我們通過(guò)一些例子學(xué)習(xí)什么是設(shè)計(jì)模式。Farhana:當(dāng)然,我喜歡例子。Shubho:讓我們以汽車為例討論一下。汽車是一個(gè)很復(fù)雜的對(duì)象,由成千上萬(wàn)的其它對(duì)象組成,如發(fā)動(dòng)機(jī),車輪,方向盤,車座,車體等等其他不同的部分或部件。汽車部件當(dāng)裝配汽車時(shí),制造商需要集中并裝配這些更小的自成汽車子系統(tǒng)的不同部件。而這些不同的小部件同樣也是復(fù)雜的對(duì)象,其它制造商同樣要生產(chǎn)并組裝它
2、們。在生產(chǎn)汽車時(shí),汽車公司并不會(huì)為怎么生產(chǎn)組裝這些部件操心(前提是他們要確保這些對(duì)象/設(shè)備的質(zhì)量)。當(dāng)然,汽車制造商更加關(guān)心怎么裝配這些不同部件以便能生產(chǎn)不同型號(hào)的汽車。通過(guò)遵循不同的設(shè)計(jì),組裝不同的部件,生產(chǎn)不同型號(hào)的汽車Farhana:汽車制造公司必須有如何生產(chǎn)不同型號(hào)汽車的設(shè)計(jì)圖或藍(lán)圖,對(duì)嗎?Shubho:當(dāng)然,并且這些設(shè)計(jì)都是良好的,他們花費(fèi)大量的時(shí)間和精力來(lái)做這些設(shè)計(jì)。一旦設(shè)計(jì)完成,生產(chǎn)汽車就僅僅是照葫蘆畫瓢了。Farhana:嗯。如果事先有一些好的設(shè)計(jì),就能在短時(shí)間內(nèi)遵照這些設(shè)計(jì)生產(chǎn)不同產(chǎn)品,并且制造商在每次生
3、產(chǎn)某一個(gè)型號(hào)產(chǎn)品時(shí)就不需要重新設(shè)計(jì)或重新發(fā)明車輪,他們只需要按照已有的設(shè)計(jì)辦事就行了。生產(chǎn)不同型號(hào)產(chǎn)品(汽車)的不同設(shè)計(jì)圖Shubho:你抓到重點(diǎn)了?,F(xiàn)在假設(shè)我們是軟件生產(chǎn)商,我們使用基于需求而來(lái)的不同組件或功能構(gòu)建各種不同的軟件程序。當(dāng)生產(chǎn)這些不同軟件系統(tǒng)時(shí),我們常常需要為一些不同軟件系統(tǒng)中存在的相同情況開(kāi)發(fā)代碼,對(duì)嗎?Farhana:是的,在開(kāi)發(fā)不同軟件程序時(shí)經(jīng)常遇到相同的設(shè)計(jì)問(wèn)題。Shubho:我們嘗試使用面向?qū)ο蟮姆绞介_(kāi)發(fā)軟件,并嘗試應(yīng)用OOPD來(lái)讓代碼能易于維護(hù),可復(fù)用,可擴(kuò)展。無(wú)論什么時(shí)候,當(dāng)我們遇到這些設(shè)計(jì)問(wèn)
4、題時(shí),如果我們有一組經(jīng)過(guò)謹(jǐn)慎開(kāi)發(fā),良好測(cè)試的對(duì)象以供使用會(huì)不會(huì)更好呢?Farhana:是的,這樣能夠節(jié)省時(shí)間,生產(chǎn)出更好的軟件,且利于以后維護(hù)。Shubho:很好!從設(shè)計(jì)上來(lái)說(shuō),它的好處是你不需要開(kāi)發(fā)那些對(duì)象。經(jīng)過(guò)多年發(fā)展,人們已經(jīng)遇到過(guò)一些類似的設(shè)計(jì)問(wèn)題,并已經(jīng)形成有一些公認(rèn)的,良好的已標(biāo)準(zhǔn)化的設(shè)計(jì)方案。我們稱之為設(shè)計(jì)模式。我們一定好感謝四人組,他們?cè)凇对O(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖O(shè)計(jì)》中總結(jié)出了23種基本的設(shè)計(jì)模式。四人組由ErichGamma,RichardHelm,RalphJohnson,和JohnVlissid
5、es組成。實(shí)際中有很多面向?qū)ο笤O(shè)計(jì)模式,但這23種模式被公認(rèn)為是所有其他設(shè)計(jì)模式的基礎(chǔ)。Farhana:我能發(fā)明一個(gè)新的模式嗎?這可能嗎?Shubho:當(dāng)然,親愛(ài)的,為什么不能呢?!設(shè)計(jì)模式不是由科學(xué)家發(fā)明創(chuàng)造的。它們是被發(fā)現(xiàn)找到的。這意味著任何通用問(wèn)題場(chǎng)景中都有一些好的設(shè)計(jì)方案在那。如果我們能夠指出一個(gè)能夠解決一個(gè)新的設(shè)計(jì)相關(guān)問(wèn)題的面向?qū)ο笤O(shè)計(jì),那么這將會(huì)是一個(gè)由我們定義的新的設(shè)計(jì)模式。誰(shuí)知道呢?!如果我們發(fā)現(xiàn)找到一些設(shè)計(jì)模式,或許將來(lái)有一天人們會(huì)稱我們?yōu)槎私M,哈哈。Fahana::)我們將如何學(xué)習(xí)設(shè)計(jì)模式?Shubh
6、o:我一直認(rèn)為例子是學(xué)習(xí)的最好途徑。在我們的學(xué)習(xí)方法中,我們不會(huì)先討論理論后討論實(shí)現(xiàn)。我認(rèn)為這是很糟糕的方式。設(shè)計(jì)模式不是基于理論的發(fā)明。事實(shí)上,問(wèn)題場(chǎng)景首先出現(xiàn),其次是基于這些問(wèn)題的來(lái)龍去脈和需求,然后是一些設(shè)計(jì)方案的演化,最后其中的一些被標(biāo)準(zhǔn)化為模式。所以對(duì)每一個(gè)我們討論的設(shè)計(jì)模式,我們將嘗試?yán)斫獠⒎治鲆恍┈F(xiàn)實(shí)生活中的例子,然后一步步嘗試歸納一個(gè)設(shè)計(jì),并最后總結(jié)一些與某些模式匹配設(shè)計(jì)。設(shè)計(jì)模式就是在這些相似過(guò)程中發(fā)現(xiàn)的。你認(rèn)為呢?Farhana:我想這種方式對(duì)我更有用。如果我能通過(guò)分析問(wèn)題和歸納方案得出設(shè)計(jì)模式,我就不
7、用死記那些設(shè)計(jì)模式和定義了。請(qǐng)按照你的方式繼續(xù)。一個(gè)常見(jiàn)的設(shè)計(jì)問(wèn)題和它的解決方案Shubho:讓我們考慮下面的場(chǎng)景:我們房間里有些電器(電燈,風(fēng)扇等)。這些設(shè)備按照某些方式布局,并由開(kāi)關(guān)控制。任何時(shí)候你都能替換或排查一個(gè)電器而不用碰到其他東西。例如,你可以換一個(gè)電燈而不需要換開(kāi)關(guān)。同樣,你可以換一個(gè)開(kāi)關(guān)或排查它而不需要碰到或替換相應(yīng)的電燈或風(fēng)扇;甚至你可以用把電燈連接到風(fēng)扇的開(kāi)關(guān)上,把風(fēng)扇連到電燈的開(kāi)關(guān)上,而不需要碰到開(kāi)關(guān)。電器:風(fēng)扇和電燈風(fēng)扇和電燈的兩種不同開(kāi)關(guān),一個(gè)普通點(diǎn),另一個(gè)別致點(diǎn)Farhana:是的,但就是這樣子
8、,對(duì)嗎?Shubho:是的,確實(shí)如此,就該如此布局。當(dāng)不同東西聯(lián)系在一起時(shí),它們應(yīng)該按照一定方式聯(lián)系:修改或替換一個(gè)系統(tǒng)時(shí)不會(huì)影響到另一個(gè),或者說(shuō)即便有,也應(yīng)該最小化。這能夠讓你的系統(tǒng)易于管理,且成本低。想想一下,如果改一下房間里的燈同時(shí)需要改開(kāi)關(guān),你會(huì)樂(lè)意在你房子上花錢并安裝這個(gè)系統(tǒng)嗎?Farhana