摘要:可以說,如果問題是我們的敵人,代碼是我們的劍,設(shè)計模式就是高手心中的劍譜。中級選手,在編程的時候知道何時該用什么設(shè)計模式,而什么時候不該用。設(shè)計模式被用來簡化設(shè)計,讓設(shè)計更優(yōu)雅。其中最具有普遍性的方案往往就是我們的設(shè)計模式的內(nèi)容。
目錄概要
設(shè)計模式的開山之作
對設(shè)計模式的誤解
關(guān)于使用設(shè)計模式的3個問題
無處不在的設(shè)計模式
如何解釋設(shè)計模式
設(shè)計模式的開山之作1994年10月21日,有四個哥們兒出版了一本書,名字叫做《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(Design Patterns: Elements of Reusable Object-Oriented Software)。
這四個哥們兒后來以“四人幫”(Gang of Four,GoF)著稱,而他們的《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書也就成為了設(shè)計模式的開山之作。
對設(shè)計模式的誤解之前發(fā)布了幾篇介紹設(shè)計模式的的博客,看到有的讀者對設(shè)計模式的評論是:
關(guān)于使用設(shè)計模式的3個問題看了也不會,會了也不用
設(shè)計模式有使用場景的,不能生搬硬套
我寫了那么多年代碼,從來沒用過設(shè)計模式
這里我不得不說,大家對設(shè)計模式是有很多誤解的,面對設(shè)計模式我們至少要思考下面3個問題:
首先,什么是設(shè)計模式?
設(shè)計模式簡而言之就是一些常見軟件設(shè)計問題的標(biāo)準(zhǔn)解決方案。
正如設(shè)計模式的開山之作《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書中所說的那樣:
所有結(jié)構(gòu)良好的面向?qū)ο篌w系結(jié)構(gòu)中都包含了許多設(shè)計模式。
設(shè)計面對向軟件比較困難,而設(shè)計可復(fù)用的面向?qū)ο筌浖透永щy。
內(nèi)行的設(shè)計者知道:不是解決任何問題都要從頭做起。他們更愿意復(fù)用以前使用過的解決方案。當(dāng)找到一個好的解決方案,他們會一遍又一遍地使用。這些經(jīng)驗(yàn)是他們成為內(nèi)行的部分原因。
可以說,如果問題是我們的敵人,代碼是我們的劍,設(shè)計模式就是高手心中的劍譜。
接著,怎么使用設(shè)計模式
《Head First 設(shè)計模式》一書的作者里曼說,使用設(shè)計模式有3個層次:
? Beginner —— 初級選手,在編程的時候無處不用設(shè)計模式,認(rèn)為用的模式越多設(shè)計就越好。
? Intermediate —— 中級選手,在編程的時候知道何時該用什么設(shè)計模式,而什么時候不該用。
? Zen —— 到了禪的境界,“他山之石,可以攻玉”。設(shè)計模式被用來簡化設(shè)計,讓設(shè)計更優(yōu)雅。
非要把設(shè)計模式硬塞到設(shè)計之中,那只是初級菜鳥的層次。
最后,設(shè)計模式在實(shí)際生產(chǎn)中使用的多不多?
設(shè)計模式本身就是源自實(shí)際問題的優(yōu)秀解決方案的總結(jié),因此在很多基礎(chǔ)的架構(gòu)和框架里,都可以看到設(shè)計模式的影子。
比如Java開發(fā)者經(jīng)常使用的Spring框架,從創(chuàng)建型的工廠模式、單例模式、原型模式,再到結(jié)構(gòu)型的享元模式、代理模式,再到行為型的觀察者模式、模板模式,在其源碼中隨處可見。
無處不在的設(shè)計模式設(shè)計模式不是空中樓閣,也不是只有面試和吹牛的時候才能放在嘴邊的炫耀資本,而是一個優(yōu)秀的開發(fā)者可以讓自己的設(shè)計更加優(yōu)雅的不可或缺的好幫手。
并且設(shè)計模式也并不是軟件行業(yè)特有的現(xiàn)象,很多行業(yè)中有經(jīng)驗(yàn)的從業(yè)者都會使用各種“模式”來優(yōu)化自己的設(shè)計。
就拿劇本創(chuàng)作舉例,如果一個劇作家要寫一個劇本,并不是完全憑空創(chuàng)建的,也有各種業(yè)內(nèi)普遍應(yīng)用的模式,例如“悲劇英雄模式”(《麥克白》、《哈姆雷特》)、“凄美愛情模式”(《羅密歐與朱麗葉》、《梁山伯與祝英臺》)等等,都是劇作家可以使用的“設(shè)計模式”。
如何解釋設(shè)計模式一般而言,要介紹一個設(shè)計模式,至少要包含如下4個要素:
問題(Problem)
描述了我們遇到了哪些問題,也就是某個設(shè)計模式的使用場景。
解決方案(Solution)
為了解決上面遇到的問題,我們想到了哪些解決方案。其中最具有普遍性的方案往往就是我們的設(shè)計模式的內(nèi)容。
效果(Consequence)
設(shè)計模式就像一個模板,可以為解決不同的問題提供思路。而解決問題的效果就是衡量一個設(shè)計模式在某個場景下是否適合的關(guān)鍵因素,一般我們要衡量的方面有靈活性、可移植性、可擴(kuò)充性、性能等。
模式名稱(Pattern Name)
一個好的名字,可以讓我們記住某個模式,并且可以望名知意,使其更便于傳播。甚至作為我們思維方式的一部分保留下來。
以上面4個要素為基礎(chǔ),我們解釋設(shè)計模式可以分為如下幾個方面:
模式名稱:模式的名字
模式別名:模式的其他名字或者昵稱
模式分類:模式屬于那種類型
模式意圖:回答模式是干什么的,為了解決什么問題等問題
模式結(jié)構(gòu):模式包含哪些角色,以及這些角色之間的關(guān)系
模式適用性:哪些場景適合使用該模式
模式實(shí)現(xiàn):通過例子來展示模式的實(shí)現(xiàn)過程
已知應(yīng)用:該模式已經(jīng)被使用在了什么地方
相關(guān)模式:模式中用到的模式,與該模式有替代關(guān)系的模式
發(fā)布/訂閱模式 和 事件驅(qū)動模型 從原理到實(shí)戰(zhàn)的系列文章:
設(shè)計模式之發(fā)布訂閱模式(1) 一文搞懂發(fā)布訂閱模式
設(shè)計模式之發(fā)布訂閱模式(2) Redis 發(fā)布/訂閱模式
設(shè)計模式之發(fā)布訂閱模式(3) 深入Spring Events事件驅(qū)動模型
設(shè)計模式之發(fā)布訂閱模式(4) Guava Eventbus 事件處理
設(shè)計模式之發(fā)布訂閱模式(5) Spring Events源碼解析
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74464.html
摘要:到如今都沒有官方支持熱更新,這大概也是為了應(yīng)用不受蘋果審核條款的忌憚,一旦支持了熱更新,那在過審核的時候可能就會沒那么容易了,所以熱更新對于在平臺的存亡是一個重要因素。 再說風(fēng)險1、和 react-native 、weex 、uni-app 、taro 等平臺不同,flutter framework 的大部分控...
摘要:直到年月日,金蝶微博品牌正式升級為云之家,從打造社交化工作空間,向提升企業(yè)的運(yùn)營和管理效率傾斜。所以客觀地說,隨著這幾年金蝶的不斷發(fā)力,深耕大樣板客戶和產(chǎn)品,給了云之家更多顛覆的勇氣和信心。提起OA市場大家更多的會想到的是泛微、致遠(yuǎn)、藍(lán)凌,自從泛微上市以來原本三分天下的格局被打破。泛微在市場上對另外兩家采取高壓態(tài)勢,藍(lán)凌選擇緊抱阿里的大腿尋找避風(fēng)港灣,致遠(yuǎn)則選擇差異化競爭,放棄OA這個名詞轉(zhuǎn)...
angular2是什么?我猜不容我贅述,各位一定略有耳聞,無論是曾經(jīng)AngularJS的擁躉,亦或是React的粉絲,都或多或少的對她有過一點(diǎn)了解。未見其物、先聞其聲,angular2在問世之前已經(jīng)做足了宣傳,想必諸位也一定被下面各種詞匯所震懾,什么:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive ...
摘要:今天知識星球發(fā)文公告月日之后產(chǎn)生的收入,對個人用戶將收取手續(xù)費(fèi)。存在兩種情況一部分人會實(shí)行退稅,一部分人會實(shí)行補(bǔ)繳。所以,對于高收入群體,明年月份就很可能會存在需要補(bǔ)繳個稅的情況。不要因?yàn)檎咴虻牟涣私?,最終導(dǎo)致一年的辛苦努力大打折扣。 今天知識星球發(fā)文公告:8月20日之后產(chǎn)生的收入,對個人用戶將收取20%手續(xù)費(fèi)。 showImg(https://segmentfault.com/i...
閱讀 3124·2023-04-25 15:44
閱讀 1890·2019-08-30 13:11
閱讀 2855·2019-08-30 11:11
閱讀 3076·2019-08-29 17:21
閱讀 1323·2019-08-29 15:38
閱讀 966·2019-08-29 12:49
閱讀 1812·2019-08-28 18:19
閱讀 3237·2019-08-26 14:01