成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“設(shè)計(jì)模式已死”,這不是你所了解的設(shè)計(jì)模式

譯文 精選
開發(fā) 前端
“設(shè)計(jì)模式”這個(gè)術(shù)語已然成了“面向?qū)ο蟮脑O(shè)計(jì)模式”的代名詞,所以當(dāng)你遇到“設(shè)計(jì)模式已死”的這種奇怪說法時(shí)不要感到震驚。在這篇文章中,我們將重新聲明下什么是設(shè)計(jì)模式,這有助于我們?cè)谟懻摶蚴褂媚撤N設(shè)計(jì)模式時(shí),能使我們確定我們究竟在談?wù)摶蚴褂玫氖鞘裁础?/div>

譯者 | 胥磊

審校 | 孫淑娟

軟件行業(yè)中幾乎在每個(gè)公司,我們都會(huì)聽到一些話題的討論,我相信關(guān)于設(shè)計(jì)模式的爭(zhēng)論絕對(duì)是其中之一。你甚至可以找到無數(shù)的帖子、文章或者Quora和Stackoverflow上的問題的問答無不是在爭(zhēng)論設(shè)計(jì)模式,前些天我就看到了Quora上一個(gè)很古老的問題:“為什么現(xiàn)在程序員很少談及設(shè)計(jì)模式?哪些模式(如果有的話)依然還有價(jià)值?”顯然提問者所說的設(shè)計(jì)模式是面向?qū)ο蟮脑O(shè)計(jì)模式,更確切的說是GoF書中介紹的那23種設(shè)計(jì)模式,當(dāng)然大多數(shù)回答問題的人也都是這么認(rèn)為的。

“設(shè)計(jì)模式”這個(gè)術(shù)語已然成了“面向?qū)ο蟮脑O(shè)計(jì)模式”的代名詞,所以當(dāng)你遇到“設(shè)計(jì)模式已死”的這種奇怪說法時(shí)不要感到震驚。在這篇文章中,我們將重新聲明下什么是設(shè)計(jì)模式,這有助于我們?cè)谟懻摶蚴褂媚撤N設(shè)計(jì)模式時(shí),能使我們確定我們究竟在談?wù)摶蚴褂玫氖鞘裁础?/p>

1、設(shè)計(jì)模式對(duì)你意味著什么?

讓我們拋開所有的書面上的定義和解釋,當(dāng)提到設(shè)計(jì)模式這個(gè)概念時(shí)你首先想到的是什么?一個(gè)不該被打破的規(guī)則?或是一個(gè)字斟句酌的學(xué)術(shù)建議?亦或是又一個(gè)的設(shè)計(jì)約束?還是說一個(gè)你只需要知道就能通過求職面試的法寶?

對(duì)我來說,設(shè)計(jì)模式就像我腦海中的喃喃警語,時(shí)刻提醒我不要重復(fù)造車輪。你可能有過類似的沖動(dòng),當(dāng)遇到一個(gè)問題后就想立即找出應(yīng)對(duì)的解決方案,并開始設(shè)計(jì)/編寫程序——如果是這樣的話,那么你也是一個(gè)重復(fù)造車輪的人。設(shè)想一下如果已經(jīng)有一個(gè)現(xiàn)成的解決方案,你再去創(chuàng)造一個(gè)到頭來只是浪費(fèi)了不必要的時(shí)間和精力。盡管這種沖動(dòng)可能會(huì)隨著時(shí)間的推移而有所克制,但要完全克服這種沖動(dòng)情緒,我相信設(shè)計(jì)模式就是“良藥”之一。

許多軟件工程師應(yīng)該都碰到過一個(gè)相似的問題,因?yàn)槟承┰蚨家阅撤N特定的方式解決了它。上述情況同時(shí)也提醒了我,這背后可能隱藏了一個(gè)道理,啟示我們要從不同角度去看待問題,即使我們很少這么干。讓我們看一下GoF的書中介紹的一段:

“我們都知道設(shè)計(jì)經(jīng)驗(yàn)的價(jià)值,但你又有過多少次那種“似曾相識(shí)”的感覺的經(jīng)歷——那種你曾經(jīng)解決過類似問題,但卻不知道在哪以及如何解決的感覺?如果你能記住以前問題的細(xì)節(jié)以及解決的方法,那么你就可以重新使用這種經(jīng)驗(yàn),而不是再次去找解決問題的方案”。

或多或少我們都有過類似的經(jīng)歷:當(dāng)我們無法記住之前的解決方案時(shí),就會(huì)出現(xiàn)反復(fù)去解決同一個(gè)常見的設(shè)計(jì)問題的情況。設(shè)計(jì)模式就是重用解決方案去解決反復(fù)出現(xiàn)的問題,從而節(jié)省了我們的時(shí)間和精力,可以轉(zhuǎn)而去做其他事情。現(xiàn)在,讓我們深入探討一些模式的基本概念和定義。

2、模式意味著什么?

什么是模式?模式的概念并不是軟件行業(yè)所特有的,其他學(xué)科和行業(yè)如建筑學(xué)、經(jīng)濟(jì)學(xué)等同樣適用。讓我們來看下建筑學(xué)界權(quán)威人士克里斯托弗-亞歷山大對(duì)模式的定義:

“每種模式都是一個(gè)由三部分組成的規(guī)則,它描述了某種背景、問題和解決方案之間的關(guān)系。”(Alexander, 1979)“每個(gè)模式都描述了一個(gè)在我們的環(huán)境中反復(fù)出現(xiàn)的問題,然后描述了解決這個(gè)問題的核心。通過這種方式,你就可以無數(shù)次地使用這個(gè)解決方案,而不是用同樣的方式做多次。”(Alexander, 1977)

現(xiàn)在讓我們看看模式在軟件行業(yè)的意義。“軟件架構(gòu)的設(shè)計(jì)模式描述了在特定的設(shè)計(jì)環(huán)境中反復(fù)出現(xiàn)的特定的設(shè)計(jì)問題,并為其提供了一套可行的通用方案。解決方案是通過描述其組成部件、它們之間責(zé)任和關(guān)系以及協(xié)作方式來指定的。”(BMRSS, 96)

基于上述定義,我們可以將模式視為背景、問題和解決方案三者之間的有機(jī)結(jié)合。它是一個(gè)寬泛的概念,可以應(yīng)用于不同的規(guī)模和抽象層次,從設(shè)計(jì)整個(gè)軟件系統(tǒng)到解決特定編程語言的設(shè)計(jì)問題都可以應(yīng)用。

3、不同的模式類別

模式是根據(jù)其規(guī)模和抽象程度來分類的:

(1)架構(gòu)模式

(2)設(shè)計(jì)模式

(3)習(xí)語

圖片

架構(gòu)模式關(guān)注的是整個(gè)軟件系統(tǒng)的架構(gòu),它的子系統(tǒng),不同的大組件,以及它們的結(jié)合方式。這種模式是一種高層級(jí)的抽象,并不關(guān)心編程語言是什么,也不關(guān)心使用的是什么框架。

“架構(gòu)模式描述了軟件系統(tǒng)的基本結(jié)構(gòu)的組織模式。它提供了一套預(yù)定義的子系統(tǒng),并規(guī)定了它們的責(zé)任,其中包括組織它們之間關(guān)系的規(guī)則和指導(dǎo)手冊(cè)”。(BMRSS, 96)

另一方面,我們?cè)谧畹偷某橄髮哟紊弦灿幸恍┠J剑Q之為習(xí)語,它涉及到設(shè)計(jì)和實(shí)現(xiàn)。習(xí)語是針對(duì)特定語言的,也就是說A語言中的習(xí)語在B語言中是不相干的。“習(xí)語是一種針對(duì)特定編程語言的低級(jí)模式。習(xí)語描述了如何使用給定語言的特性來實(shí)現(xiàn)特定方面的組件或組件之間的關(guān)系”。(BMRSS, 96)。在上述那些規(guī)模和抽象水平的模式之間,還有一些其他的模式,那就是設(shè)計(jì)模式。

4、設(shè)計(jì)模式的近距離觀察

讓我們回顧一下設(shè)計(jì)模式的定義:“設(shè)計(jì)模式為完善軟件系統(tǒng)的子系統(tǒng)或組件,以及它們之間的關(guān)系而提供的一個(gè)方案。它描述了一個(gè)相互通信的組件的常見結(jié)構(gòu),用以解決特定的環(huán)境中常見的設(shè)計(jì)問題”。(BMRSS, 96) 。設(shè)計(jì)模式屬于中等規(guī)模,這意味著它們既不像架構(gòu)模式那樣高度抽象,也不像習(xí)語那樣與編程語言耦合。使用設(shè)計(jì)模式并不影響軟件系統(tǒng)的架構(gòu),但它會(huì)影響子系統(tǒng)的結(jié)構(gòu)及其較小的組件。

現(xiàn)在讓我們來討論下面這句話(摘自同一參考文獻(xiàn)),其中包含了關(guān)于設(shè)計(jì)模式的一個(gè)重要事實(shí)。“它們往往獨(dú)立于某種特定的編程語言或編程范式”。(BMRSS, 96) 。根據(jù)之前在文章中談到的模式類別,我們重新表述一下:“它們獨(dú)立于一種特定的編程語言,但往往(不總是)依賴于一種編程范式。”這句話的第一部分很清楚:如果一個(gè)模式依賴于特定的編程語言,那么它就屬于習(xí)語的范疇。關(guān)于第二部分,設(shè)計(jì)模式是為解決編程范式中出現(xiàn)的常見問題而做出的嘗試。它們很可能是對(duì)范式的缺陷的應(yīng)對(duì)。例如GoF書中描述的23種面向?qū)ο蟮脑O(shè)計(jì)模式,其中大部分都不是函數(shù)式編程范式中的關(guān)注點(diǎn)。反過來也一樣,因?yàn)樵O(shè)計(jì)模式都有不同的背景。正如你在下圖中看到的,不同的范式可以共享設(shè)計(jì)模式,但我們不打算討論這個(gè)話題,因?yàn)樗隽吮疚牡姆秶?/p>

圖片

5、一個(gè)著名觀點(diǎn)的分析

記住前面的章節(jié),讓我們快速瀏覽一下當(dāng)你簡單地用谷歌搜索設(shè)計(jì)模式時(shí)可能遇到的觀點(diǎn):函數(shù)式編程語言不需要設(shè)計(jì)模式。你可以在這里找到答案,顯然這種說法是錯(cuò)誤的,因?yàn)樗凳驹O(shè)計(jì)模式只屬于面向?qū)ο蠓妒健TO(shè)計(jì)模式是一個(gè)在函數(shù)式編程范式和面向?qū)ο缶幊谭妒街卸伎梢源嬖诘母拍睿O(shè)計(jì)模式是針對(duì)各種范式的問題和需求而設(shè)計(jì)的。函數(shù)式編程范式同樣有專門針對(duì)其背景的設(shè)計(jì)模式。此外,正如我們?cè)谇皫坠?jié)所討論的,不同的范式有不同的背景,因此就會(huì)遇到不同的問題,我們不應(yīng)該指望范式B的設(shè)計(jì)模式來解決范式A的問題。

6、快速回顧

設(shè)計(jì)模式與其他模式類型類似,試圖解決一個(gè)特定環(huán)境中反復(fù)出現(xiàn)的問題。

(1)它們是獨(dú)立于語言的,但大多是跟范式耦合。

(2)作為中等規(guī)模,它們不像架構(gòu)模式那樣抽象。

(3)它們的應(yīng)用并不影響軟件系統(tǒng)的基本架構(gòu),但會(huì)影響子系統(tǒng)的架構(gòu)。

(4)最后但也同樣重要的是,它們是(所有類型的模式)防止我們重復(fù)造輪的手段。

在我看來設(shè)計(jì)模式并不是約束我們?cè)O(shè)計(jì)的嚴(yán)格規(guī)則。它們既不是固定的,也不是無懈可擊的,因?yàn)樗鼈兛梢赃M(jìn)化,可以變得完善,甚至可以消逝,但模式的概念仍然存在。遵循模式就像是一種思維方式,幫助我們找出可能更好的解決方案。

原文鏈接:https://dzone.com/articles/a-seemingly-simple-question-what-are-design-patter

譯者介紹

胥磊,51CTO社區(qū)編輯,某頭部電商技術(shù)副總監(jiān),關(guān)注Java后端開發(fā),技術(shù)管理,架構(gòu)優(yōu)化,分布式開發(fā)等領(lǐng)域。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2009-11-18 13:20:07

PHP設(shè)計(jì)模式

2025-05-12 07:43:14

SpringMVC設(shè)計(jì)模式代碼

2016-04-29 19:53:15

2015-02-09 10:00:38

谷歌衛(wèi)星互聯(lián)網(wǎng)

2019-03-21 04:47:20

口令網(wǎng)絡(luò)安全數(shù)據(jù)泄露

2023-09-26 00:27:07

設(shè)計(jì)模式鏈接

2021-02-01 10:01:58

設(shè)計(jì)模式 Java單例模式

2010-04-01 10:44:14

MySQL

2016-12-07 07:17:11

云計(jì)算科技新聞早報(bào)

2023-10-07 00:14:53

2022-05-09 08:04:50

工廠模式設(shè)計(jì)模式

2023-11-02 21:11:11

JavaScript設(shè)計(jì)模式

2019-04-23 10:30:23

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2021-04-19 21:25:48

設(shè)計(jì)模式到元

2021-03-03 16:01:48

Web設(shè)計(jì)模式

2020-04-23 11:03:09

前端語言開發(fā)

2018-10-07 06:30:40

代碼設(shè)計(jì)模式面向?qū)ο笤瓌t

2022-01-12 13:33:25

工廠模式設(shè)計(jì)

2023-05-04 08:47:31

命令模式抽象接口

2023-10-07 00:17:06

AirDrop中介者模式
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩精品免费 | 日日操夜夜操视频 | 婷婷狠狠 | 伊人伊成久久人综合网站 | 成人日韩 | 成人av影院 | 蜜桃视频一区二区三区 | 国产精品视频在线免费观看 | 福利视频一区二区 | 成人av电影在线观看 | 精品国产一区二区在线 | 亚洲精品在线视频 | 亚洲h视频| 欧美激情亚洲激情 | 国产精品久久久久久亚洲调教 | 二区在线视频 | 成人av免费网站 | 欧美日韩综合视频 | 久久久久久久久淑女av国产精品 | 国产精品久久久久影院色老大 | 欧美一级在线免费观看 | 中文字幕丁香5月 | 日韩中文字幕在线视频观看 | 久色视频在线观看 | 国产91久久久久蜜臀青青天草二 | 精品免费国产视频 | 91久操网| 午夜影院在线观看 | 日本网站在线看 | 欧美一级淫片007 | 亚洲成人av | 99爱视频 | 国产精品射 | 羞羞视频网站免费观看 | 久久午夜视频 | 精品国产一区二区三区久久狼黑人 | 亚洲国产精品一区二区www | 免费在线看黄 | 亚洲精视频 | 国产精品一区二区日韩 | 亚洲国产精品成人综合久久久 |