前言
武俠小說中武術分招式和內功,比如獨孤九劍就是招式,九陽神功就是內功。招式可能照貓畫虎很快就能學會,但是內功心法則需要日積月累,一點一點的修煉。
在我們日常開發中也分招式和內功。比如我們常見的C#、Java、C++、等編程語言,Visual Studio、Eclipse等開發工具,ASP.NET Core、JSP等開發技術,AutoFac、CAP等框架技術,這些我們都可以認爲是招式。而數據結構、算法、設計模式、重構、軟件工程等則爲內功。
一般內功好的人,學習劍招也會很快,就比如張無忌學會了九陽神功後,什麼乾坤大挪移、少林龍爪手都能很快學會,甚至超越那些修煉了很多年的人。
在軟件開發領域,那些知道數據結構、算法、設計模式、重構、軟件工程等的人,當要去學習新的語言或開發技術的時候,就會學的很快,甚至可以彎道超車。爲什麼會這樣?因爲他們內功深厚,邏輯清晰,可以達到觸類旁通。所以在當今的開發領域,只知道劍招很難脫穎而出,修煉內功至關重要。
另外,那些在招式上觸碰到瓶頸的人,也可以通過內功的修煉來提升。
接下來,先立個Flag,先把設計模式啃下來,後邊也會總結一下自己的學習筆記。
設計模式起源
設計模式起源於建築領域。畢竟建築領域經歷了幾千年的沉澱,有太多的經驗可以吸取。
每個模式都描述了一個在我們的環境中不斷出現的問題,然後描述了該問題的解決方案的核心,通過這種方式,我們可以無數次的重用那些已有的成功的解決方案,無須再重複相同的工作。簡單的講就是:
模式是在特定的環境下人們解決某類重複出現問題的一套成功或有效的解決方案。
軟件模式:是將模式的一般概念應用於軟件開發領域,即軟件開發的總體指導思路或參照樣板。
軟件模式並非僅限於設計模式,還包括架構模式、分析模式和過程模式等。實際上,在軟件開發生命週期的每一個階段都存在着一些被認同的模式。
軟件模式的基礎結構主要由四部分構成:
- 問題描述【待解決的問題是什麼】
- 前提條件【在何種環境或約束條件下使用】
- 解法【如何解決】
- 效果【有哪些優缺點】
軟件模式與具體的應用領域無關,無論是web、窗體、移動端等都可以使用。
設計模式是什麼?
設計模式用於在特定條件下爲一些重複出現的軟件設計問題提供合理的、有效的解決方案。
設計模式(Design Pattern) 是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結,使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解並且保證代碼的可靠性。
簡單就是,前輩們一步步踩坑總結的經驗,使我們可以少走彎路,並寫出更加優雅的代碼。
最初GoF在《設計模式:可複用面向對象軟件的基礎》中介紹了23種經典設計模式,但是到了今天已經遠遠不止這些。
設計模式一般包含模式名稱、問題、目的、解決方案和效果等組成要素,其中模式名稱、問題、解決方案和效果又是關鍵要素。
- 模式名稱:通過一兩個簡單的詞來描述問題、解決方案和效果。便於理解和開發人員之間的溝通。也就是給他取一個簡潔易懂的名字,一看就知道這個模式是幹嘛的。
- 問題:描述了應該在何時使用模式。它包含了設計中存在的問題和問題存在的原因。使用場景
- 解決方案:描述了一個設計模式的組成成份,以及這些組成成份之間的相互關係,各自的職責和協作方式。通常解決方案通過UML類圖和核心代碼來進行描述。設計模式是如何實現的
- 效果:描述了模式的優缺點,以及在使用模式時應權衡的問題。優缺點
設計模式根據用途可以分爲三種類型:
- 創建型(Creational)用於描述如何創建對象。包含5種創建型設計模式
- 結構型(Structural)用於描述如何實現類或對象的組合。包含7種結構型設計模式
- 行爲型(Behavioral)用於描述類或對象怎樣交互已經怎樣分配職責。包含11種行爲型設計模式
另外簡單工廠模式,不屬於23種設計模式,但是每本書基本都會進行介紹,可能太簡單了。
下邊是設計模式的分類:
創建型模式
- 單例模式 Singleton Pattern
- 簡單工廠模式 Simple Factory Pattern
- 工廠方法模式 Factory Method Pattern
- 抽象工廠模式 Abstract Factory Pattern
- 原型模式 Prototype Pattern
- 建造者模式 Builder Pattern
結構型模式
- 適配器模式 Adapter Pattern
- 橋接模式 Bridge Pattern
- 組合模式 Composite Pattern
- 裝飾器模式 Decorator Pattern
- 外觀模式 Facade Pattern
- 享元模式 Flyweight Pattern
- 代理模式 Proxy Pattern
行爲模式
- 責任鏈模式 Chain of Responsibility Pattern
- 命令模式 Command Pattern
- 解釋器模式 Interpreter Pattern
- 迭代器模式 Iterator Pattern
- 中介者模式 Mediator Pattern
- 備忘錄模式 Memento Pattern
- 觀察者模式 Observer Pattern
- 狀態模式 State Pattern
- 策略模式 Strategy Pattern
- 模板方法模式 Template Method Pattern
- 訪問者模式 Visitor Pattern
設計模式的好處
- 藉助前人的智慧和總結,避免做一些重複的工作,少走一些彎路,節省寶貴的時間。
- 得益於設計模式的通用語言,使得人們無論是做什麼項目,什麼語言,什麼團隊,對於同一個設計模式進行溝通時,基本無障礙。
- 得益於設計模式的可重用性和可擴展性,使得我們可以更好的重用一些設計方案、功能模塊,甚至一個完整的系統。
- 對設計模式的使用情況進行文檔化,將有利於別人更快的理解系統的設計,更加方便知識的傳播。
- 有助於開發者更加深入的理解面向對象開發。
如果您覺得這篇文章有幫助到你,歡迎推薦,也歡迎關注我的公衆號。