自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

女朋友非要問我什么是設(shè)計(jì)模式!

開發(fā) 項(xiàng)目管理
什么是模式?我們先從字面意思來理解,“?!保耗P?、模具,我們可以看做是一種標(biāo)準(zhǔn),“式”:形式、方式,我們可以看做是一種方法,兩者組合在一起就是“標(biāo)準(zhǔn)化的方法”叫做模式。

 

 

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

通過這篇文章你能學(xué)到什么?

  1. 什么是設(shè)計(jì)模式?
  2. 我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計(jì)模式?
  3. 常用的設(shè)計(jì)模式有哪些?
  4. 我們應(yīng)該如何學(xué)習(xí)設(shè)計(jì)模式?

什么是模式?什么是設(shè)計(jì)模式?

什么是模式?我們先從字面意思來理解,“模”:模型、模具,我們可以看做是一種標(biāo)準(zhǔn),“式”:形式、方式,我們可以看做是一種方法,兩者組合在一起就是“標(biāo)準(zhǔn)化的方法”叫做模式。

舉個(gè)很恰當(dāng)了例子:中國的四大發(fā)明之一,活字印刷術(shù)的誕生過程就是一種模式的產(chǎn)生。在沒有活字印刷術(shù)之前,每頁文字刻成一個(gè)板子,如果一個(gè)字錯(cuò)了就得重新雕刻,錯(cuò)誤率很高,成本也高,效率還低。之后演變成為每個(gè)字為單獨(dú)小板,印刷文章的時(shí)候只需要在大板子上根據(jù)需求排列不同的字就可以了,這些字不僅雕刻起來錯(cuò)誤率低,還可以重復(fù)不同的文章使用。這是一種標(biāo)準(zhǔn)化方法的演變過程,也是一種模式的誕生。

[[319033]]

 

每個(gè)模式都描述了一類我們?cè)谏a(chǎn)環(huán)境中遇到的問題,并且給出了解決這個(gè)問題的核心方案。所以在我們遇到這類問題時(shí),使用這些方案就可以避免重復(fù)的工作。簡而言之:模式是在特定環(huán)境下,人們解決某類重復(fù)出現(xiàn)問題的一套成功或有效的解決方案。

上面我們了解了模式,但有的朋友該說了,我們是軟件開發(fā)工作者,知道模式有什么用呢?別著急,下面我們就來認(rèn)識(shí)一下軟件模式。

軟件模式,如果按剛才我們理解的“模式”,軟件模式就可以解讀為:軟件生命周期內(nèi)的一些標(biāo)準(zhǔn)化方法。我們知道軟件的生命周期并不單單只開發(fā)周期,軟件前期的需求分析,后期的迭代維護(hù)都屬于軟件的生命周期,所以相對(duì)應(yīng)的在每個(gè)階段都會(huì)有對(duì)應(yīng)的模式。作為開發(fā)者我們接觸最多的就是開發(fā)階段,而在開發(fā)階段使用最多的應(yīng)該就是設(shè)計(jì)模式了。那什么又是設(shè)計(jì)模式呢?

據(jù)網(wǎng)上搜索得知:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解并且保證代碼可靠性。其實(shí)說白了,設(shè)計(jì)模式就是經(jīng)過無數(shù)填坑人的努力所總結(jié)的一套標(biāo)準(zhǔn)化的被所有開發(fā)者承認(rèn)的代碼設(shè)計(jì)方案。

設(shè)計(jì)模式一般包含模式名稱、問題、目的、解決方案、效果等組成要素,其中關(guān)鍵要素是模式名稱、問題、解決方案和效果。

模式名稱(Pattern Name)通過一兩個(gè)詞來描述模式的問題、解決方案和效果,以便更好地理解模式并方便開發(fā)人員之間的交流,絕大多數(shù)模式都是根據(jù)其功能或模式結(jié)構(gòu)來命名的;

問題(Problem)描述了應(yīng)該在何時(shí)使用模式,它包含了設(shè)計(jì)中存在的問題以及問題存在的原因;

解決方案(Solution)描述了一個(gè)設(shè)計(jì)模式的組成成分,以及這些組成成分之間的相互關(guān)系,各自的職責(zé)和協(xié)作方式,通常解決方案通過UML類圖和核心代碼來進(jìn)行描述;

效果(Consequences)描述了模式的優(yōu)缺點(diǎn)以及在使用模式時(shí)應(yīng)權(quán)衡的問題

個(gè)人感覺這些已經(jīng)很全面的解釋了什么是設(shè)計(jì)模式,之后我也打算從這四個(gè)方面去分析每一種模式。

為什么要學(xué)習(xí)設(shè)計(jì)模式?

認(rèn)識(shí)完設(shè)計(jì)模式我們肯定會(huì)產(chǎn)生以下疑問?我們?yōu)槭裁匆獙W(xué)習(xí)設(shè)計(jì)模式?它在我們開發(fā)當(dāng)中都解決了哪些問題?

通過學(xué)習(xí)我覺得學(xué)習(xí)設(shè)計(jì)模式可以解決以下三個(gè)問題:

1、避免重復(fù)造輪子

學(xué)習(xí)計(jì)算機(jī)我們肯定都聽過這句話“不要重復(fù)造輪子”,設(shè)計(jì)模式首先解決的就是我們重復(fù)造輪子的問題。

舉個(gè)栗子:在沒有學(xué)習(xí)設(shè)計(jì)模式的時(shí)候,我們使用圖片加載或者其他工具類,肯定是經(jīng)過大量的編程,走過很多彎路,填過很多坑才會(huì)想到“我們應(yīng)該封裝一下,單獨(dú)一個(gè)實(shí)例這樣更加便于管理”,于是我們開始封裝,廢了好大勁封裝成功,之后學(xué)習(xí)完 “單例模式”發(fā)現(xiàn),咦,這不就是我封裝的那個(gè)方式么?如果早學(xué)了設(shè)計(jì)模式,我就。。。。所以,在時(shí)間就是金錢的今天,設(shè)計(jì)模式無疑會(huì)為有助于我們提高開發(fā)和設(shè)計(jì)效率,但也不保證一定會(huì)提高。

[[319034]]

 

2、降低溝通成本

工作中我們不可能是一直獨(dú)立開發(fā),肯定會(huì)跟別人協(xié)調(diào)開發(fā)。只要有合作就少不了溝通,設(shè)計(jì)模式也能解決開發(fā)人員之間的溝通問題。

[[319035]]

 

再舉個(gè)栗子:你從零開發(fā)了一個(gè)項(xiàng)目,后來項(xiàng)目越做越大,功能模塊也越來越多,多到你天天加班也弄不完的情況,這個(gè)時(shí)候你向老板提出“漲工資不然不干了,然后老板開始給你各種畫餅。。。”(扯遠(yuǎn)了),這時(shí)候你向老板提出需要一個(gè)幫手,然后老板給你招來一個(gè)小弟,你需要帶他熟悉項(xiàng)目,你對(duì)他說我這個(gè)地方用了“單例模式”,這里用了“裝飾者模式”,然后這里是“工廠模式”,然后小弟懵逼了。然后你還得費(fèi)好大勁去講解你是怎么實(shí)現(xiàn)的這些模式。。。很顯然小弟并不了解設(shè)計(jì)模式,不然你就可以省下很多時(shí)間多寫幾個(gè)bug了。

因?yàn)樵O(shè)計(jì)模式提供了一套通用的設(shè)計(jì)詞匯和一種通用的形式來方便開發(fā)人員之間溝通和交流,使得設(shè)計(jì)方案更加通俗易懂,所以無論你使用哪種編程語言,做什么類型的項(xiàng)目,甚至你處于一個(gè)國際化的開發(fā)團(tuán)隊(duì),當(dāng)面對(duì)同一個(gè)設(shè)計(jì)模式時(shí),你和別人的理解并無二異,因?yàn)樵O(shè)計(jì)模式是跨語言、跨平臺(tái)、跨應(yīng)用、跨國界的。

3、優(yōu)秀的復(fù)用性和可擴(kuò)展性

上大學(xué)的時(shí)候我們學(xué)過,一個(gè)優(yōu)秀的軟件需要有六大特性:功能性、可靠性、可用性、效率、可維護(hù)性、可移植性。然而很多開發(fā)人員在開發(fā)的時(shí)候多半不會(huì)考慮這些東西。因?yàn)閲鴥?nèi)的開發(fā)環(huán)境大多是先出結(jié)果,出問題了再說。所以,如何在有限的時(shí)間內(nèi)開發(fā)出優(yōu)秀的軟件是成為優(yōu)秀開發(fā)人員的必修之路。大部分設(shè)計(jì)模式都兼顧了系統(tǒng)的可重用性和可擴(kuò)展性。例如:代碼中經(jīng)常使用某個(gè)功能,我們可以使用“單例模式”把他封裝起來,如果考慮某個(gè)地方的可擴(kuò)展性,我們可以使用“裝飾模式”等等。

[[319036]]

 

為什么要學(xué)習(xí)設(shè)計(jì)模式?

經(jīng)過無數(shù)前輩的總結(jié),常用的設(shè)計(jì)模式主要有23種,而這23種設(shè)計(jì)模式又可以分為三大類:創(chuàng)建型模式(5種)、結(jié)構(gòu)型模式(7種)和行為型模式(11種)。其中創(chuàng)建型模式主要用于描述如何創(chuàng)建對(duì)象,結(jié)構(gòu)型模式主要用于描述如何實(shí)現(xiàn)類或?qū)ο蟮慕M合,行為型模式主要用于描述類或?qū)ο笤鯓咏换ヒ约霸鯓臃峙渎氊?zé)。下圖是23種模式的具體分類:表格展示

 

如何學(xué)習(xí)?

在我們正式開始學(xué)習(xí)之前我想先分享下我對(duì)設(shè)計(jì)模式學(xué)習(xí)的看法。

我從大學(xué)開始接觸設(shè)計(jì)模式,畢業(yè)后我也從事了近三年的開發(fā)工作。在這期間我體會(huì)到了設(shè)計(jì)模式的種種便利,也了解一些朋友對(duì)設(shè)計(jì)模式的看法。在這里我想分享一下自己學(xué)習(xí)設(shè)計(jì)模式的心得體會(huì),供大家參考:

1、不要畏懼。

工作期間我跟很多同事談?wù)撨^設(shè)計(jì)模式,他們大多數(shù)的反應(yīng)是“那個(gè)感覺挺難的,現(xiàn)在沒打算去學(xué)。”很多人還沒開始就已經(jīng)退縮了。其實(shí)掌握設(shè)計(jì)模式并不是很難的事情,我們只需要拆分他們,一個(gè)一個(gè)模式去熟悉,一個(gè)例子一個(gè)例子去看、去模仿,多思考,多實(shí)踐,一定可以掌握。關(guān)鍵是要開始去學(xué)。

 

[[319037]]

 

2、抓住重點(diǎn)。

其實(shí)學(xué)習(xí)每一個(gè)設(shè)計(jì)模式只需要抓住以下幾點(diǎn),我們就能大概掌握這種模式。

  • 這個(gè)設(shè)計(jì)模式是要解決什么問題,需要在那種情況下使用?
  • 這個(gè)設(shè)計(jì)模式的結(jié)構(gòu)圖是什么樣的?
  • 這個(gè)設(shè)計(jì)模式的優(yōu)缺點(diǎn)分別是什么?
  • 在現(xiàn)實(shí)和代碼中分別能舉出什么樣的使用該模式的例子?

[[319038]]

 

3、親身實(shí)踐。

老話說:“紙上得來終覺淺,絕知此事要躬行”,看十遍例子也不如敲一遍代碼,一定要把例子敲一遍,并且舉一反三自己設(shè)計(jì)例子。這樣才能記得牢固。

[[319039]]

 

4、不能濫用。

千萬不要濫用模式,不要?jiǎng)倢W(xué)了一兩個(gè)模式就想在代碼中硬套。每個(gè)模式都有自己的適用場(chǎng)景,不能為了使用模式而使用模式。要做到具體情況具體分析,濫用設(shè)計(jì)模式很可能寫出一堆垃圾代碼。

5、活學(xué)活用。

我這里直接用劉偉老師的總結(jié)來解釋。設(shè)計(jì)模式的“上乘”境界:“手中無模式,心中有模式”。模式使用的最高境界是你已經(jīng)不知道具體某個(gè)設(shè)計(jì)模式的定義和結(jié)構(gòu)了,但你會(huì)靈活自如地選擇一種設(shè)計(jì)方案【其實(shí)就是某個(gè)設(shè)計(jì)模式】來解決某個(gè)問題,設(shè)計(jì)模式已經(jīng)成為你開發(fā)技能的一部分,能夠手到擒來,“內(nèi)功”與“招式”已渾然一體,要達(dá)到這個(gè)境界并不是看完某本書或者開發(fā)一兩個(gè)項(xiàng)目就能夠?qū)崿F(xiàn)的,它需要不斷沉淀與積累,所以,對(duì)模式的學(xué)習(xí)不要急于求成,要循序漸進(jìn)。


 

 

模式從不保證任何東西,它不能保證你一定能夠做出可復(fù)用的軟件,提高你的生產(chǎn)率,更不能保證世界和平。模式并不能替代人來完成軟件系統(tǒng)的創(chuàng)造,它們只不過會(huì)給那些缺乏經(jīng)驗(yàn)但卻具備才能和創(chuàng)造力的人帶來希望。

責(zé)任編輯:武曉燕 來源: 碼個(gè)蛋
相關(guān)推薦

2020-10-15 09:35:27

亂碼UTF-8GBK

2020-12-14 10:25:08

DNS通信IP

2021-04-06 06:23:18

MVCC并發(fā)事務(wù)

2020-09-08 08:55:52

Dubbo服務(wù)全鏈路

2021-09-04 07:56:44

單例模式寫法

2020-03-16 14:08:59

線程熔斷限流

2021-09-06 08:50:49

服務(wù)Dubbo參數(shù)

2012-11-30 16:38:37

面試

2021-09-14 12:00:11

VR字節(jié)跳動(dòng)

2019-10-09 10:45:16

云計(jì)算Web互聯(lián)網(wǎng)

2020-10-19 13:01:31

刪庫程序員思科

2020-12-28 06:11:24

羊群效應(yīng)zookeeper

2019-04-26 14:46:18

GitGitHub局域網(wǎng)

2019-07-22 10:34:31

大案牘術(shù)大數(shù)據(jù)Big Data

2020-08-14 09:04:34

分布式事務(wù)

2019-12-23 10:26:02

3PC分布式2PC

2021-12-17 17:52:02

MySQL B+面試

2021-03-09 12:27:05

微服務(wù) 微服務(wù)架構(gòu)應(yīng)用程序

2021-05-28 09:23:07

數(shù)據(jù)倉庫數(shù)據(jù)湖

2020-12-14 09:17:47

程序員技術(shù)工資
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)