新聞中心
下面讓我們跟著碼仔一起來(lái)認(rèn)識(shí)一下設(shè)計(jì)模式吧!

自流井ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
通過(guò)這篇文章你能學(xué)到什么?
- 什么是設(shè)計(jì)模式?
- 我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計(jì)模式?
- 常用的設(shè)計(jì)模式有哪些?
- 我們應(yīng)該如何學(xué)習(xí)設(shè)計(jì)模式?
什么是模式?什么是設(shè)計(jì)模式?
什么是模式?我們先從字面意思來(lái)理解,“模”:模型、模具,我們可以看做是一種標(biāo)準(zhǔn),“式”:形式、方式,我們可以看做是一種方法,兩者組合在一起就是“標(biāo)準(zhǔn)化的方法”叫做模式。
舉個(gè)很恰當(dāng)了例子:中國(guó)的四大發(fā)明之一,活字印刷術(shù)的誕生過(guò)程就是一種模式的產(chǎn)生。在沒(méi)有活字印刷術(shù)之前,每頁(yè)文字刻成一個(gè)板子,如果一個(gè)字錯(cuò)了就得重新雕刻,錯(cuò)誤率很高,成本也高,效率還低。之后演變成為每個(gè)字為單獨(dú)小板,印刷文章的時(shí)候只需要在大板子上根據(jù)需求排列不同的字就可以了,這些字不僅雕刻起來(lái)錯(cuò)誤率低,還可以重復(fù)不同的文章使用。這是一種標(biāo)準(zhǔn)化方法的演變過(guò)程,也是一種模式的誕生。
每個(gè)模式都描述了一類(lèi)我們?cè)谏a(chǎn)環(huán)境中遇到的問(wèn)題,并且給出了解決這個(gè)問(wèn)題的核心方案。所以在我們遇到這類(lèi)問(wèn)題時(shí),使用這些方案就可以避免重復(fù)的工作。簡(jiǎn)而言之:模式是在特定環(huán)境下,人們解決某類(lèi)重復(fù)出現(xiàn)問(wèn)題的一套成功或有效的解決方案。
上面我們了解了模式,但有的朋友該說(shuō)了,我們是軟件開(kāi)發(fā)工作者,知道模式有什么用呢?別著急,下面我們就來(lái)認(rèn)識(shí)一下軟件模式。
軟件模式,如果按剛才我們理解的“模式”,軟件模式就可以解讀為:軟件生命周期內(nèi)的一些標(biāo)準(zhǔn)化方法。我們知道軟件的生命周期并不單單只開(kāi)發(fā)周期,軟件前期的需求分析,后期的迭代維護(hù)都屬于軟件的生命周期,所以相對(duì)應(yīng)的在每個(gè)階段都會(huì)有對(duì)應(yīng)的模式。作為開(kāi)發(fā)者我們接觸最多的就是開(kāi)發(fā)階段,而在開(kāi)發(fā)階段使用最多的應(yīng)該就是設(shè)計(jì)模式了。那什么又是設(shè)計(jì)模式呢?
據(jù)網(wǎng)上搜索得知:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解并且保證代碼可靠性。其實(shí)說(shuō)白了,設(shè)計(jì)模式就是經(jīng)過(guò)無(wú)數(shù)填坑人的努力所總結(jié)的一套標(biāo)準(zhǔn)化的被所有開(kāi)發(fā)者承認(rèn)的代碼設(shè)計(jì)方案。
設(shè)計(jì)模式一般包含模式名稱(chēng)、問(wèn)題、目的、解決方案、效果等組成要素,其中關(guān)鍵要素是模式名稱(chēng)、問(wèn)題、解決方案和效果。
模式名稱(chēng)(Pattern Name)通過(guò)一兩個(gè)詞來(lái)描述模式的問(wèn)題、解決方案和效果,以便更好地理解模式并方便開(kāi)發(fā)人員之間的交流,絕大多數(shù)模式都是根據(jù)其功能或模式結(jié)構(gòu)來(lái)命名的;
問(wèn)題(Problem)描述了應(yīng)該在何時(shí)使用模式,它包含了設(shè)計(jì)中存在的問(wèn)題以及問(wèn)題存在的原因;
解決方案(Solution)描述了一個(gè)設(shè)計(jì)模式的組成成分,以及這些組成成分之間的相互關(guān)系,各自的職責(zé)和協(xié)作方式,通常解決方案通過(guò)UML類(lèi)圖和核心代碼來(lái)進(jìn)行描述;
效果(Consequences)描述了模式的優(yōu)缺點(diǎn)以及在使用模式時(shí)應(yīng)權(quán)衡的問(wèn)題
個(gè)人感覺(jué)這些已經(jīng)很全面的解釋了什么是設(shè)計(jì)模式,之后我也打算從這四個(gè)方面去分析每一種模式。
為什么要學(xué)習(xí)設(shè)計(jì)模式?
認(rèn)識(shí)完設(shè)計(jì)模式我們肯定會(huì)產(chǎn)生以下疑問(wèn)?我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計(jì)模式?它在我們開(kāi)發(fā)當(dāng)中都解決了哪些問(wèn)題?
通過(guò)學(xué)習(xí)我覺(jué)得學(xué)習(xí)設(shè)計(jì)模式可以解決以下三個(gè)問(wèn)題:
1、避免重復(fù)造輪子
學(xué)習(xí)計(jì)算機(jī)我們肯定都聽(tīng)過(guò)這句話(huà)“不要重復(fù)造輪子”,設(shè)計(jì)模式首先解決的就是我們重復(fù)造輪子的問(wèn)題。
舉個(gè)栗子:在沒(méi)有學(xué)習(xí)設(shè)計(jì)模式的時(shí)候,我們使用圖片加載或者其他工具類(lèi),肯定是經(jīng)過(guò)大量的編程,走過(guò)很多彎路,填過(guò)很多坑才會(huì)想到“我們應(yīng)該封裝一下,單獨(dú)一個(gè)實(shí)例這樣更加便于管理”,于是我們開(kāi)始封裝,廢了好大勁封裝成功,之后學(xué)習(xí)完 “單例模式”發(fā)現(xiàn),咦,這不就是我封裝的那個(gè)方式么?如果早學(xué)了設(shè)計(jì)模式,我就。。。。所以,在時(shí)間就是金錢(qián)的今天,設(shè)計(jì)模式無(wú)疑會(huì)為有助于我們提高開(kāi)發(fā)和設(shè)計(jì)效率,但也不保證一定會(huì)提高。
2、降低溝通成本
工作中我們不可能是一直獨(dú)立開(kāi)發(fā),肯定會(huì)跟別人協(xié)調(diào)開(kāi)發(fā)。只要有合作就少不了溝通,設(shè)計(jì)模式也能解決開(kāi)發(fā)人員之間的溝通問(wèn)題。
再舉個(gè)栗子:你從零開(kāi)發(fā)了一個(gè)項(xiàng)目,后來(lái)項(xiàng)目越做越大,功能模塊也越來(lái)越多,多到你天天加班也弄不完的情況,這個(gè)時(shí)候你向老板提出“漲工資不然不干了,然后老板開(kāi)始給你各種畫(huà)餅。。?!?扯遠(yuǎn)了),這時(shí)候你向老板提出需要一個(gè)幫手,然后老板給你招來(lái)一個(gè)小弟,你需要帶他熟悉項(xiàng)目,你對(duì)他說(shuō)我這個(gè)地方用了“單例模式”,這里用了“裝飾者模式”,然后這里是“工廠模式”,然后小弟懵逼了。然后你還得費(fèi)好大勁去講解你是怎么實(shí)現(xiàn)的這些模式。。。很顯然小弟并不了解設(shè)計(jì)模式,不然你就可以省下很多時(shí)間多寫(xiě)幾個(gè)bug了。
因?yàn)樵O(shè)計(jì)模式提供了一套通用的設(shè)計(jì)詞匯和一種通用的形式來(lái)方便開(kāi)發(fā)人員之間溝通和交流,使得設(shè)計(jì)方案更加通俗易懂,所以無(wú)論你使用哪種編程語(yǔ)言,做什么類(lèi)型的項(xiàng)目,甚至你處于一個(gè)國(guó)際化的開(kāi)發(fā)團(tuán)隊(duì),當(dāng)面對(duì)同一個(gè)設(shè)計(jì)模式時(shí),你和別人的理解并無(wú)二異,因?yàn)樵O(shè)計(jì)模式是跨語(yǔ)言、跨平臺(tái)、跨應(yīng)用、跨國(guó)界的。
3、優(yōu)秀的復(fù)用性和可擴(kuò)展性
上大學(xué)的時(shí)候我們學(xué)過(guò),一個(gè)優(yōu)秀的軟件需要有六大特性:功能性、可靠性、可用性、效率、可維護(hù)性、可移植性。然而很多開(kāi)發(fā)人員在開(kāi)發(fā)的時(shí)候多半不會(huì)考慮這些東西。因?yàn)閲?guó)內(nèi)的開(kāi)發(fā)環(huán)境大多是先出結(jié)果,出問(wèn)題了再說(shuō)。所以,如何在有限的時(shí)間內(nèi)開(kāi)發(fā)出優(yōu)秀的軟件是成為優(yōu)秀開(kāi)發(fā)人員的必修之路。大部分設(shè)計(jì)模式都兼顧了系統(tǒng)的可重用性和可擴(kuò)展性。例如:代碼中經(jīng)常使用某個(gè)功能,我們可以使用“單例模式”把他封裝起來(lái),如果考慮某個(gè)地方的可擴(kuò)展性,我們可以使用“裝飾模式”等等。
為什么要學(xué)習(xí)設(shè)計(jì)模式?
經(jīng)過(guò)無(wú)數(shù)前輩的總結(jié),常用的設(shè)計(jì)模式主要有23種,而這23種設(shè)計(jì)模式又可以分為三大類(lèi):創(chuàng)建型模式(5種)、結(jié)構(gòu)型模式(7種)和行為型模式(11種)。其中創(chuàng)建型模式主要用于描述如何創(chuàng)建對(duì)象,結(jié)構(gòu)型模式主要用于描述如何實(shí)現(xiàn)類(lèi)或?qū)ο蟮慕M合,行為型模式主要用于描述類(lèi)或?qū)ο笤鯓咏换ヒ约霸鯓臃峙渎氊?zé)。下圖是23種模式的具體分類(lèi):表格展示
如何學(xué)習(xí)?
在我們正式開(kāi)始學(xué)習(xí)之前我想先分享下我對(duì)設(shè)計(jì)模式學(xué)習(xí)的看法。
我從大學(xué)開(kāi)始接觸設(shè)計(jì)模式,畢業(yè)后我也從事了近三年的開(kāi)發(fā)工作。在這期間我體會(huì)到了設(shè)計(jì)模式的種種便利,也了解一些朋友對(duì)設(shè)計(jì)模式的看法。在這里我想分享一下自己學(xué)習(xí)設(shè)計(jì)模式的心得體會(huì),供大家參考:
1、不要畏懼。
工作期間我跟很多同事談?wù)撨^(guò)設(shè)計(jì)模式,他們大多數(shù)的反應(yīng)是“那個(gè)感覺(jué)挺難的,現(xiàn)在沒(méi)打算去學(xué)。”很多人還沒(méi)開(kāi)始就已經(jīng)退縮了。其實(shí)掌握設(shè)計(jì)模式并不是很難的事情,我們只需要拆分他們,一個(gè)一個(gè)模式去熟悉,一個(gè)例子一個(gè)例子去看、去模仿,多思考,多實(shí)踐,一定可以掌握。關(guān)鍵是要開(kāi)始去學(xué)。
2、抓住重點(diǎn)。
其實(shí)學(xué)習(xí)每一個(gè)設(shè)計(jì)模式只需要抓住以下幾點(diǎn),我們就能大概掌握這種模式。
- 這個(gè)設(shè)計(jì)模式是要解決什么問(wèn)題,需要在那種情況下使用?
- 這個(gè)設(shè)計(jì)模式的結(jié)構(gòu)圖是什么樣的?
- 這個(gè)設(shè)計(jì)模式的優(yōu)缺點(diǎn)分別是什么?
- 在現(xiàn)實(shí)和代碼中分別能舉出什么樣的使用該模式的例子?
3、親身實(shí)踐。
老話(huà)說(shuō):“紙上得來(lái)終覺(jué)淺,絕知此事要躬行”,看十遍例子也不如敲一遍代碼,一定要把例子敲一遍,并且舉一反三自己設(shè)計(jì)例子。這樣才能記得牢固。
4、不能濫用。
千萬(wàn)不要濫用模式,不要?jiǎng)倢W(xué)了一兩個(gè)模式就想在代碼中硬套。每個(gè)模式都有自己的適用場(chǎng)景,不能為了使用模式而使用模式。要做到具體情況具體分析,濫用設(shè)計(jì)模式很可能寫(xiě)出一堆垃圾代碼。
5、活學(xué)活用。
我這里直接用劉偉老師的總結(jié)來(lái)解釋。設(shè)計(jì)模式的“上乘”境界:“手中無(wú)模式,心中有模式”。模式使用的最高境界是你已經(jīng)不知道具體某個(gè)設(shè)計(jì)模式的定義和結(jié)構(gòu)了,但你會(huì)靈活自如地選擇一種設(shè)計(jì)方案【其實(shí)就是某個(gè)設(shè)計(jì)模式】來(lái)解決某個(gè)問(wèn)題,設(shè)計(jì)模式已經(jīng)成為你開(kāi)發(fā)技能的一部分,能夠手到擒來(lái),“內(nèi)功”與“招式”已渾然一體,要達(dá)到這個(gè)境界并不是看完某本書(shū)或者開(kāi)發(fā)一兩個(gè)項(xiàng)目就能夠?qū)崿F(xiàn)的,它需要不斷沉淀與積累,所以,對(duì)模式的學(xué)習(xí)不要急于求成,要循序漸進(jìn)。
模式從不保證任何東西,它不能保證你一定能夠做出可復(fù)用的軟件,提高你的生產(chǎn)率,更不能保證世界和平。模式并不能替代人來(lái)完成軟件系統(tǒng)的創(chuàng)造,它們只不過(guò)會(huì)給那些缺乏經(jīng)驗(yàn)但卻具備才能和創(chuàng)造力的人帶來(lái)希望。
文章名稱(chēng):女朋友非要問(wèn)我什么是設(shè)計(jì)模式!
當(dāng)前網(wǎng)址:http://www.5511xx.com/article/dposhje.html


咨詢(xún)
建站咨詢(xún)
