设计模式:模式或反模式,这就是问题
我最近遇到了Wiki頁(yè)面“ Anti-pattern” ,其中包含詳盡的反模式列表。 其中一些對(duì)我來(lái)說(shuō)很明顯。 他們中的一些讓我想了一下,其他的讓我想了更多。 然后,我開(kāi)始在頁(yè)面上查找反模式“ singleton”,但找不到。 (文本搜索停止在單線(xiàn)態(tài)…)
單例是模式還是反模式?
別擔(dān)心。 我不會(huì)談?wù)搯卫?網(wǎng)上有足夠多的討論 。 現(xiàn)在讓我僅以單例為例。 如果是單例,則圖案和反圖案之間沒(méi)有清晰的界線(xiàn)。
作為一個(gè)例子,單例可以很容易地被使用,它很容易理解并且是一個(gè)很好的例子。 直到幾年前,Singleton還是很受歡迎的,直到開(kāi)始被認(rèn)為是反模式。 有什么變化? 計(jì)算機(jī)科學(xué)家會(huì)變得更聰明,發(fā)現(xiàn)他們認(rèn)為是一種好的模式實(shí)際上是反模式嗎? 從一開(kāi)始,單例就是一個(gè)反模式,我們只是不知道嗎? 還是單身人士本身已經(jīng)從成為好的設(shè)計(jì)模式變成了反模式?
我認(rèn)為,答案很奇怪:這兩種情況。 它與物理理論非常相似。 牛頓定理說(shuō),力與加速度和人體質(zhì)量成正比。 愛(ài)因斯坦說(shuō)這是不正確的,并且速度越大,誤差越大。 牛頓錯(cuò)了嗎? 是的,在某種意義上。 我們還能使用牛頓定律嗎? 是的,我們可以,實(shí)際上是在低速情況下(與光速相比)。
從一開(kāi)始單身人士就是壞人嗎? 是的,和現(xiàn)在一樣多。 我們還可以使用單例嗎? 是的,我們可以,實(shí)際上,在低耗速的情況下我們可以做……在簡(jiǎn)單問(wèn)題的情況下可以進(jìn)行操作,而這些簡(jiǎn)單問(wèn)題不需要將單例作為反模式的考慮。
反模式似乎與環(huán)境有關(guān)。 在這種情況下,環(huán)境比在物理情況下要復(fù)雜得多。 量子理論,相對(duì)論或不可逆熱力學(xué)(我父親是教授)很簡(jiǎn)單,因?yàn)樗鼈儾豢紤]人類(lèi)。 他們只是關(guān)于這個(gè)問(wèn)題。
編程是關(guān)于人的。
這是我們經(jīng)常忘記的事情。 當(dāng)一切開(kāi)始的時(shí)候,都是關(guān)于位和字節(jié),寄存器,存儲(chǔ)器和十六進(jìn)制代碼的。 程序是否運(yùn)行良好且執(zhí)行不正常。 但是后來(lái)變得越來(lái)越復(fù)雜。 計(jì)算機(jī)科學(xué)成為信息技術(shù)。 越來(lái)越多的人使用IT,越來(lái)越多的人編寫(xiě)程序。 他們是程序員,他們?yōu)榇硕?即使是一個(gè)相對(duì)簡(jiǎn)單的項(xiàng)目,如果要商業(yè)化的話(huà),也需要六到八個(gè)程序員。 它們也是“模式或反模式”依賴(lài)的環(huán)境的一部分。
環(huán)境還包含簡(jiǎn)單的事物,例如框架,編程語(yǔ)言,操作系統(tǒng)和其他技術(shù)細(xì)節(jié),但它們單獨(dú)或一起的復(fù)雜性都無(wú)法與人類(lèi)媲美。
在就模式與反模式辯論做出決定時(shí),許多人會(huì)問(wèn)一個(gè)問(wèn)題:模式可以用于什么? 這有什么用? 有什么好處? 這些是重要的問(wèn)題。 如果沒(méi)有好處:沒(méi)有理由考慮這種模式。 但這并不能使其成為反模式。 如果沒(méi)有好處,那么這種方法根本不是一種模式。 重要的問(wèn)題是,它有什么弊端? 一般的Joe可以通過(guò)哪種方式來(lái)構(gòu)建結(jié)構(gòu)。 采用該模式的人射擊自己的腿的可能性有多大? 這不是新事物。 博弈論還指出,這對(duì)于最小化最大損失比最大化可能的收益更為重要。
看一個(gè)模式,你能告訴我嗎? 可能不是。 在某些情況下,是的。 恭喜,您找到了反模式。 在其他情況下,您找不到任何錯(cuò)誤的用法。 這并不意味著沒(méi)有。 時(shí)間會(huì)證明。 普通的喬會(huì)來(lái),并將以您在最狂野的夢(mèng)中無(wú)法想象的方式(或就此而言,夜馬)使用這種模式。
因此,反模式并不是天生的壞事,就像槍支不會(huì)殺死人一樣。 錯(cuò)誤使用模式是不好的。 當(dāng)人們傾向于以錯(cuò)誤的方式使用模式時(shí),則它是一種反模式。 單例就是這種情況。
類(lèi)似的事情可以通過(guò)代碼注釋捕獲。 當(dāng)我開(kāi)始學(xué)習(xí)Pascal編程時(shí),我們的老師要求50%的代碼必須有意義。 今天怎么樣? 干凈的代碼說(shuō)注釋是邪惡的。 有點(diǎn)。 評(píng)論太多了。 有時(shí)我發(fā)現(xiàn)自己參與的項(xiàng)目完全被驅(qū)逐。 甚至不允許Javadoc。 奇怪的? 這只是他們應(yīng)用干凈代碼模式的方式。
因此,這些天開(kāi)始困擾我的問(wèn)題是,在編程中使用設(shè)計(jì)模式是一種好模式還是本身就是一種反模式?
翻譯自: https://www.javacodegeeks.com/2014/02/design-patterns-pattern-or-anti-pattern-that-is-the-question.html
總結(jié)
以上是生活随笔為你收集整理的设计模式:模式或反模式,这就是问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux添加用户的命令(linux 加
- 下一篇: 设计模式:不可变的嵌入式构建器