溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

設(shè)計(jì)模式和反模式簡(jiǎn)單介紹

發(fā)布時(shí)間:2020-08-10 11:51:31 來(lái)源:ITPUB博客 閱讀:108 作者:suke04 欄目:編程語(yǔ)言

作為一個(gè)資深開(kāi)發(fā)人員,大家都應(yīng)該聽(tīng)說(shuō)過(guò)設(shè)計(jì)模式(design pattern),但是不是所有的人都聽(tīng)說(shuō)過(guò)反模式(anti-pattern)。今天我們就來(lái)談?wù)労笳?,何為反模式?

談反模式之前當(dāng)然先要談?wù)労螢樵O(shè)計(jì)模式,因?yàn)閮烧呤蔷o密聯(lián)系在一起的。從我個(gè)人的理解認(rèn)為,設(shè)計(jì)模式是一種在前人的設(shè)計(jì)經(jīng)驗(yàn)上總結(jié)出來(lái)的對(duì)于一些普遍存在的問(wèn)題提供的通用的解決方案。這些設(shè)計(jì)模式已經(jīng)經(jīng)過(guò)了長(zhǎng)時(shí)間的實(shí)際應(yīng)用和驗(yàn)證,被證實(shí)是有效可行的解決方案。通過(guò)使用設(shè)計(jì)模式,我們可以獲得以下優(yōu)勢(shì):

1.       開(kāi)發(fā)小組不需要重新設(shè)計(jì)解決方案來(lái)解決已經(jīng)被前人解決過(guò)的問(wèn)題。如此可以節(jié)省很多設(shè)計(jì)開(kāi)發(fā)時(shí)間。

2.       當(dāng)開(kāi)發(fā)小組討論設(shè)計(jì)的時(shí)候,使用設(shè)計(jì)模式可以使大家更好了理解問(wèn)題所在和解決方案,而且對(duì)解決方案有一個(gè)比較統(tǒng)一的認(rèn)知。

3.       設(shè)計(jì)模式本身已經(jīng)通過(guò)了大量的實(shí)際運(yùn)用和驗(yàn)證,其設(shè)計(jì)質(zhì)量和實(shí)用價(jià)值有很好的保證。

4.       設(shè)計(jì)模式本身有健全的文檔,可以一定程度上簡(jiǎn)化撰寫(xiě)開(kāi)發(fā)文檔。


在開(kāi)發(fā)過(guò)程中,使用設(shè)計(jì)模式對(duì)系統(tǒng)/軟件開(kāi)發(fā)有很多其他的優(yōu)點(diǎn),這里就不一一列舉了。一些常用的設(shè)計(jì)模式包括:?jiǎn)瘟心J剑S模式,修飾模式,策略模式,代理模式等等。有興趣的朋友可以看下“四人幫”的設(shè)計(jì)模式這本書(shū)“Design Patterns: Elements of Reusable Object-Oriented Software,其他還有大量討論設(shè)計(jì)模式的書(shū)籍,比如“Head First Design Pattern”,  “The Design Patterns Java Workbook” 等等。


簡(jiǎn)單的談完了設(shè)計(jì)模式,我們來(lái)談一下重點(diǎn),什么是反模式。很多人對(duì)反模式有一個(gè)理解誤區(qū),有人認(rèn)為反模式是由于將通常使用的設(shè)計(jì)模式用在了錯(cuò)誤的地方,也有人認(rèn)為反模式只是一種壞習(xí)慣。簡(jiǎn)單的來(lái)說(shuō),反模式是指在對(duì)經(jīng)常面對(duì)的問(wèn)題經(jīng)常使用的低效,不良,或者有待優(yōu)化的設(shè)計(jì)模式/方法。甚至,反模式也可以是一種錯(cuò)誤的開(kāi)發(fā)思想/理念。在這里我舉一個(gè)最簡(jiǎn)單的例子:在面向?qū)ο笤O(shè)計(jì)/編程中,有一條很重要的原則, 單一責(zé)任原則(Single responsibility principle)。其中心思想就是對(duì)于一個(gè)模塊,或者一個(gè)類來(lái)說(shuō),這個(gè)模塊或者這個(gè)類應(yīng)該只對(duì)系統(tǒng)/軟件的一個(gè)功能負(fù)責(zé),而且該責(zé)任應(yīng)該被該類完全封裝起來(lái)。當(dāng)開(kāi)發(fā)人員需要修改系統(tǒng)的某個(gè)功能,這個(gè)模塊/類是最主要的修改地方。相對(duì)應(yīng)的一個(gè)反模式就是上帝類(God Class),通常來(lái)說(shuō),這個(gè)類里面控制了很多其他的類,同時(shí)也依賴其他很多類。整個(gè)類不光負(fù)責(zé)自己的主要單一功能,而且還負(fù)責(zé)了其他很多功能,包括一些輔助功能。很多維護(hù)老程序的開(kāi)發(fā)人員們可能都遇過(guò)這種類,一個(gè)類里有幾千行的代碼,有很多功能,但是責(zé)任不明確單一。單元測(cè)試程序也變復(fù)雜無(wú)比。維護(hù)/修改這個(gè)類的時(shí)間要遠(yuǎn)遠(yuǎn)超出其他類的時(shí)間。很多時(shí)候,形成這種情況并不是開(kāi)發(fā)人員故意的。很多情況下主要是由于隨著系統(tǒng)的年限,需求的變化,項(xiàng)目的資源壓力,項(xiàng)目組人員流動(dòng),系統(tǒng)結(jié)構(gòu)的變化而導(dǎo)致某些原先小型的,符合單一原則類慢慢的變的臃腫起來(lái)。最后當(dāng)這個(gè)類變成了維護(hù)的噩夢(mèng)(特別是原先熟悉的開(kāi)發(fā)人員離職后),重構(gòu)該類就變成了一個(gè)不容易的工程。


作者華杰, 從事IT工作15年,做過(guò)程序員,首席軟件工程師,架構(gòu)師,IT技術(shù)顧問(wèn),現(xiàn)為澳大利亞移民和邊境保護(hù)局Tech lead.

LinkedIn:http://au.linkedin.com/in/jie-hua-01021118
個(gè)人電子郵件:jhua04@outlook.com


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI