偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么要學(xué)設(shè)計(jì)模式:本質(zhì)、價(jià)值與收益

開(kāi)發(fā) 前端
時(shí)隔三年,我再次刷了一遍設(shè)計(jì)模式相關(guān)知識(shí),這次我對(duì)設(shè)計(jì)模式有了更深刻的認(rèn)識(shí)。所以今天我們就來(lái)聊聊:設(shè)計(jì)模式的本質(zhì)是什么?它的存在有什么價(jià)值?學(xué)了設(shè)計(jì)模式有什么好處?

 [[379656]]

01 設(shè)計(jì)模式的本質(zhì)

說(shuō)起設(shè)計(jì)模式,就不得不說(shuō)起重構(gòu)。在 2017 年,當(dāng)我還是一個(gè)工作 3 年的菜鳥(niǎo),我重構(gòu)了公司一個(gè)十幾年的老系統(tǒng),弄得心力交瘁。為了能深刻吸取這次重構(gòu)的教訓(xùn),我寫(xiě)了一篇文章記錄這次重構(gòu)的心得:淺談重構(gòu)中踩過(guò)的坑 - 陳樹(shù)義的博客。

時(shí)隔三年,我再次刷了一遍設(shè)計(jì)模式相關(guān)知識(shí),這次我對(duì)設(shè)計(jì)模式有了更深刻的認(rèn)識(shí)。所以今天我們就來(lái)聊聊:設(shè)計(jì)模式的本質(zhì)是什么?它的存在有什么價(jià)值?學(xué)了設(shè)計(jì)模式有什么好處?

在這篇文章中,我對(duì)設(shè)計(jì)模式的總結(jié)是:設(shè)計(jì)模式用于承載復(fù)雜的業(yè)務(wù)邏輯,使寫(xiě)出的代碼簡(jiǎn)潔、易擴(kuò)展。 簡(jiǎn)單地說(shuō),你需要去了解業(yè)務(wù)中哪些是變化的,哪些是不變的。這些變化的東西就是復(fù)雜的業(yè)務(wù)邏輯,你需要思考如何用一種合適的設(shè)計(jì)模式去承載它,使得當(dāng)它發(fā)生變化的時(shí)候,能具有很好的擴(kuò)展性。這時(shí)候如果你學(xué)過(guò)設(shè)計(jì)模式,對(duì)每種設(shè)計(jì)模式的使用場(chǎng)景都諳熟于心,那你做起來(lái)會(huì)更加得心應(yīng)手。

有些人說(shuō),我看有些人也沒(méi)學(xué)過(guò)設(shè)計(jì)模式,但他們代碼也寫(xiě)得挺好啊。這里我想表達(dá)我的第二個(gè)觀點(diǎn):抽象思維才是設(shè)計(jì)模式的內(nèi)核。 有些人接觸的項(xiàng)目多了,其在項(xiàng)目中不知不覺(jué)地就用到了一些設(shè)計(jì)模式。這些人一般都具有一個(gè)共同點(diǎn):抽象總結(jié)能力強(qiáng)。他們接觸到了東西多了,會(huì)不斷思考他們的共同之處,然后試圖總結(jié)出經(jīng)驗(yàn)。如果你具有這種抽象的思維,那即使你沒(méi)看過(guò)設(shè)計(jì)模式,你也能寫(xiě)出類似于設(shè)計(jì)模式的代碼。甚至到最后,你也可以設(shè)計(jì)出一種獨(dú)特的設(shè)計(jì)模式。到時(shí)候你可能就成為了自創(chuàng)門(mén)派的「一代宗師」了。

02 設(shè)計(jì)模式的價(jià)值

對(duì)于設(shè)計(jì)模式,不少人也有很多見(jiàn)解。有的人覺(jué)得設(shè)計(jì)模式名過(guò)其實(shí),實(shí)際編程中遠(yuǎn)遠(yuǎn)沒(méi)有那么重要。在我看來(lái),設(shè)計(jì)模式存在即合理,至少它有下面三點(diǎn)實(shí)在的意義。

設(shè)計(jì)模式是經(jīng)驗(yàn)沉淀,便于后來(lái)者快速學(xué)習(xí)。 人類之所以能一代更比一代強(qiáng),靠的就是用文字符號(hào)實(shí)現(xiàn)經(jīng)驗(yàn)傳承。而在編程領(lǐng)域,我們的設(shè)計(jì)模式其實(shí)就是前人在實(shí)戰(zhàn)中的經(jīng)驗(yàn)總結(jié),他們將這些經(jīng)驗(yàn)歸納出來(lái)成為設(shè)計(jì)模式。

對(duì)于經(jīng)驗(yàn)不是很多的人來(lái)說(shuō),學(xué)習(xí)設(shè)計(jì)模式可以讓他們有個(gè)初步的印象,等到他們有對(duì)應(yīng)的項(xiàng)目經(jīng)驗(yàn)時(shí),他們可以更好地應(yīng)用上。而對(duì)于項(xiàng)目經(jīng)驗(yàn)豐富的人來(lái)說(shuō),設(shè)計(jì)模式可以豐富他們的項(xiàng)目場(chǎng)景,進(jìn)一步提高他們對(duì)于復(fù)雜場(chǎng)景的掌控。

設(shè)計(jì)模式可以方便交流。 有些同學(xué)會(huì)覺(jué)得一些設(shè)計(jì)模式自己都用過(guò),只不過(guò)先輩們給它起了個(gè)名字而已,沒(méi)什么大不了的。但不知道這位同學(xué)是否有思考過(guò):為什么要給各個(gè)設(shè)計(jì)模式起一個(gè)名字?

我們的知道有顯性知識(shí)和隱形知識(shí)之分。顯性知識(shí)就是大家一說(shuō),我們都能聽(tīng)得懂的。例如錘子可以用來(lái)釘釘子,例如搜索引擎可以用來(lái)搜索知識(shí)。而隱形知識(shí)則是指那些我們做事的經(jīng)驗(yàn),我們很難描述出來(lái)的東西。

我們這里說(shuō)的設(shè)計(jì)模式,落地下去其實(shí)就是對(duì)應(yīng)的代碼結(jié)構(gòu)。但我們?nèi)绾螌⑦@種實(shí)戰(zhàn)中的經(jīng)驗(yàn)描述出來(lái)呢?一個(gè)最直接的方法是:我每次跟別人交流的時(shí)候,我都說(shuō):你這個(gè)創(chuàng)建一個(gè)接口,然后這個(gè)類繼承這個(gè)接口,然后 bla bla …… 可能你說(shuō)了半天,人家也還沒(méi)聽(tīng)懂。即使聽(tīng)懂了,你下次還是得嘰里呱啦說(shuō)半天,別人才能聽(tīng)得懂。

怎樣才能讓別人一下子領(lǐng)會(huì)到我們的意思呢?很簡(jiǎn)單,就是給這種代碼結(jié)構(gòu)起個(gè)名字嘛!這也才有了工廠方法、策略模式、模板模式這些名詞。當(dāng)你跟別人一說(shuō)這個(gè)名字,別人就知道是怎么回事,這不就大大提高了溝通效率嘛!

生活中其實(shí)也有很多類似的例子。我們?yōu)槭裁磿?huì)有很多思考模型,例如:SMART 模型、PDCA 模型?本質(zhì)上就是用來(lái)幫助記憶,以及便于溝通的。

想想看「搜索引擎」這個(gè)詞,在 50 年前還不存在,那為什么有搜索引擎這個(gè)詞呢?不就是為了便于交流,讓別人知道是怎么回事嗎?假設(shè)沒(méi)有「搜索引擎」這個(gè)詞,我們要描述百度,我們得怎么描述?我們?cè)囈幌拢壕褪悄愦蜷_(kāi)一個(gè)網(wǎng)頁(yè),輸入詞語(yǔ),然后會(huì)挑出來(lái)一大堆相關(guān)的信息。這樣還是挺麻煩的吧。

想想「五花肉」這個(gè)詞,可能在古代還真沒(méi)這個(gè)詞。那我們要怎么形容?古代人說(shuō):就是那種一點(diǎn)肥、一點(diǎn)瘦的豬肉?,F(xiàn)代人三個(gè)字搞定:五花肉!多高效啊!

03 學(xué)設(shè)計(jì)模式的好處

聊完了設(shè)計(jì)模式的本質(zhì)和意義,最后我們聊聊設(shè)計(jì)模式的好處。

提高系統(tǒng)設(shè)計(jì)能力,代碼更簡(jiǎn)潔,更易于擴(kuò)展。 在互聯(lián)網(wǎng)公司干過(guò)的都知道,研發(fā)流程里最確定的東西就是變化本身。需求是不可能一成不變的,唯一不變的就是需求會(huì)一直變。這就對(duì)研發(fā)人員提出了更高的要求,需要在系統(tǒng)設(shè)計(jì)的時(shí)候考慮到后續(xù)的擴(kuò)展。

設(shè)計(jì)模式本質(zhì)上就是對(duì)變化的封裝,用結(jié)構(gòu)化的代碼結(jié)構(gòu)去承載變化的需求。 當(dāng)你明白這一點(diǎn)后,你需要做的就是去分析出系統(tǒng)中變化的部分,之后采用合適的設(shè)計(jì)模式(代碼結(jié)構(gòu))去實(shí)現(xiàn)。只要變化的部分拆解得好,那你就有足夠強(qiáng)大的結(jié)構(gòu)去應(yīng)付變化的需求。

在這一個(gè)層次上,考驗(yàn)的其實(shí)是你對(duì)業(yè)務(wù)的理解,還有你掌握的設(shè)計(jì)模式的數(shù)量。這些將直接決定你是否能抽離出變化的部分,而抽離出變化的部分之后,你能不能找到合理的設(shè)計(jì)模式去承載。如果找不到,那你的「抽象思維」層次決定了你是否能自我創(chuàng)造一種設(shè)計(jì)模式。

設(shè)計(jì)模式可以幫助閱讀源碼、寫(xiě)框架。 在我們現(xiàn)在使用的不少框架中,都使用了很多的設(shè)計(jì)模式。越是底層的系統(tǒng),他們就需要越抽象,他們使用到的設(shè)計(jì)模式就越多。例如:Spring 框架中使用到的設(shè)計(jì)模式就多達(dá)十幾種,有工廠模式、代理模式、模板模式等等。

當(dāng)你理解了這些設(shè)計(jì)模式之后,你再去閱讀源碼,你就能夠更快速地領(lǐng)會(huì)框架作者的意思。否則你看源碼只會(huì)像看天書(shū)一樣,完全看不懂,還吐槽這代碼怎么這么垃圾。

設(shè)計(jì)模式有利于你面試。 這點(diǎn)可以說(shuō)是挺功利的一點(diǎn),但也確實(shí)是最實(shí)在的一點(diǎn)。工作三年以上的工程師,至少要會(huì)學(xué)習(xí)一些設(shè)計(jì)模式。只有掌握了合理的設(shè)計(jì)模式,你寫(xiě)的功能才能更易于擴(kuò)展。這也是我們這些工作多年的老碼農(nóng),和剛畢業(yè)的小年輕的區(qū)別。

如果你工作了好幾年,寫(xiě)代碼的時(shí)候還是從頭寫(xiě)到尾短平快,不考慮一點(diǎn)擴(kuò)展性,那么你可能真的很容易被替代?,F(xiàn)今的面試中,也越來(lái)越考察面試者的代碼編寫(xiě)能力了。掌握設(shè)計(jì)模式的思維方式,可以幫助你在面試中拿到更多的籌碼、贏得更高的薪資。

04 小結(jié)

設(shè)計(jì)模式本質(zhì)上是用于承載變化的業(yè)務(wù)邏輯,使寫(xiě)出的代碼簡(jiǎn)潔、易擴(kuò)展。它們就像武功中的招式,但具體的招式并不是目的,抽象思維才是設(shè)計(jì)模式的內(nèi)核。掌握了抽象的思維,你也能設(shè)計(jì)出屬于自己的模式。

設(shè)計(jì)模式是前人經(jīng)驗(yàn)的總結(jié),便于后來(lái)者快速學(xué)習(xí)。設(shè)計(jì)模式與菜名、標(biāo)簽一樣,是對(duì)代碼結(jié)構(gòu)的一種描述,便于我們交流。掌握了設(shè)計(jì)模式,能夠讓我們提高系統(tǒng)設(shè)計(jì)能力,使系統(tǒng)更易于擴(kuò)展。同時(shí)也能讓我們讀源碼、寫(xiě)框架時(shí)事半功倍。

 

圖片

 本文轉(zhuǎn)載自微信公眾號(hào)「陳樹(shù)義」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系陳樹(shù)義公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 陳樹(shù)義
相關(guān)推薦

2022-11-28 09:58:58

C++開(kāi)發(fā)

2010-11-03 09:22:00

C語(yǔ)言

2021-03-26 10:04:38

數(shù)據(jù)結(jié)構(gòu)技術(shù)

2020-10-14 08:33:23

Prometheus監(jiān)控體系

2022-06-02 08:48:39

Go枚舉器Iota

2019-03-11 08:36:11

Python代碼Flask

2009-09-07 16:45:54

.NET代碼設(shè)計(jì)

2022-01-19 22:51:57

設(shè)計(jì)匿名用戶

2012-04-16 15:14:47

web設(shè)計(jì)

2017-11-21 14:41:29

編程語(yǔ)言Python

2024-12-31 11:05:07

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網(wǎng)絡(luò)

2013-03-12 14:30:09

Ubuntu操作系統(tǒng)

2023-10-09 18:39:13

Python代碼

2021-11-19 09:49:00

CC++語(yǔ)法糖

2014-08-25 10:00:18

開(kāi)源

2019-03-19 08:59:13

物聯(lián)網(wǎng)IOT技術(shù)

2021-02-11 13:30:56

Nodejs源碼c++

2017-09-08 08:35:16

Android代碼API設(shè)計(jì)
點(diǎn)贊
收藏

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