一. 什麼是設計模式html
糾結了很久,今天終於下定決心開始寫設計模式系列,由於這個系列章節確實很差寫,在這以前,也看了好多關於設計模式的博客、視頻、書籍等,大多數用的例子要麼貓啊狗啊、大雁等動物類;要麼就是學生類,教師類,試想一下,哪一個項目中會用這些動物類教師類呢?編程
我也和我同行的朋友交流了一下關於設計模式,對設計模式的理解,能夠分爲這麼幾個層次:設計模式
①:根本不知道什麼是設計模式。架構
②:據說過幾種設計模式,理解不深。ide
③:能寫出並理解幾種設計模式,但不知道在項目中該怎麼用。微服務
毋庸置疑,可否靈活的運用好設計模式,是一個名開發工程師邁向架構師的必經之路,上面說的這麼玄乎,那麼到底什麼是涉及模式呢?這裏先借助金庸的武俠小說來類比一下。spa
做爲金庸迷的我,金庸老師的「飛雪連天射白鹿,笑書神俠倚碧鴛」14部小說每一部看了都不低於3遍以上,對裏面個各類武功也是瞭如指掌,像效果比較炫麗,威力比較大的有:「喬幫主降龍十八掌、段譽的六脈神劍、楊過的黯然銷魂掌、任我行的吸星大法等等」,這些都是外家功夫,種類不少,一我的可能會多種,這就比如.Net的中MVC、EF、SignalR等等;固然也有內功心法,典型的有:」少林和尚的易筋經、張無忌的九陽神功」,這兩種功夫自己並無太大的殺傷力,但會了這種功夫,更容易融會貫通外家功夫,使外家功夫發揮出更大效果,拿到咱們開發領域,「設計模式」就是內功心法,沒有語言之分,它是一種模式,一種思想指導着咱們開發。設計
那麼怎麼才能算精通設計模式呢?3d
看過《倚天屠龍記》的朋友可能會記得裏面有這麼一個場景:趙敏冒充明教挑戰張三丰的時候,張無忌辦成小道童出來救場,在對陣三個家奴的的時候,張三丰教了張無忌一套太極拳法,裏面有這麼一段對話:代理
張三丰演示完後,問張無忌:「無忌,你記住了多少」,張無忌回答說:「無忌不才,只有一小部分沒有記住」;過了一會,張三丰又問道:「如今能記住多少」,無忌說:「太師傅,我已經所有忘記了」,這時,張三丰說:「無忌你能夠上了」,結果顯然而知,對手被打的那叫一個慘啊。
因此:設計模式的最高境界是,忘記設計模式,將23種的設計模式天然而然的融入開發中,哈哈,固然這個有點難,沒有個五年以上的功力,很難達到這個層次。
二. 設計模式的內容
設計模式是一種套路,是把 「別人成功的例子」 拿過來靈活運用,咱們的優秀的前輩總結出來7個設計原則和23種設計模式。
設計原則:
1. 單一職責原則 2. 里氏替換原則 3. 依賴倒置原則
4. 接口隔離原則 5. 迪米特原則(最小知道原則) 6. 開閉原則
7. 組合聚合原則
設計模式:
1. 建立型模式 :工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
2. 結構型模式:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
3. 行爲型模式:策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
解釋:設計模式只是一個大概的套路,不能生搬硬套,有一些作法多是多個設計模式的融合,有的也很難歸爲某個設計模式。不要爲了設計模式而設計模式,沒有十全十美的代碼。
在上述設計模式中,大部分設計模式都用到了上面的設計思想,在設計模式中,咱們會常常看到:開閉原則、里氏替換原則(多態)、面向接口編程、面向抽象編程、抽象類、override覆寫這幾種技術。
若是對於抽象類或者override不明白的,有必要先看一下下面的章節:
第一節:從面向對象思想(oo)開發、接口、抽象類以及兩者比較
第二節:重寫(new)、覆寫(overwrite)、和重載(overload)
三. 系列章節
下面將由淺入深,結合實際案例來說解設計原則和設計模式。
第二節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第三節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第四節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第五節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第六節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第七節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第八節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第九節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十一節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十二節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十三節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十四節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十五節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十六節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十七節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十八節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第十九節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十一節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十二節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十三節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十四節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十五節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十六節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十七節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十八節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第二十九節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第三十節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第三十一節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第三十二節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
第三十三節:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
(該系列推後了,目前計劃爲 SignalR → 微服務)