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