1.前言html
寫這個東西的目的,主要是爲了本身能更好的掌握,而且靈活應用模式。其實你們在平時工做中有意無心的會用到不少模式,但並無仔細總結梳理,因此也是藉此機會對以往開發設計作些總結、思考。java
那麼,因爲設計模式的資料太多,解讀各異,部分模式的解釋很是模糊,使人費解。爲了統一標準,這裏參考維基百科做爲基準。維基百科中已經對每一個模式都作了詳細的說明,並且相關資料也很豐富,因此不會對每一個模式都進行展開。git
文中參考維基百科將各個模式根據設計目的進行整理成表,以方便未來根據應用場景快速查找使用。github
在學習和使用以前,最好能下載下面提供的例子,github上的這些例子寫地很是好,很直觀。先把例子跑起來運行下,可以更好的理解這些模式。不過,例子有時候也會誤導咱們。一個例子爲了能正常運行起來,不得不包含一個完整程序所須要的各個角色,這裏面的部分角色其實並非該設計模式所關注的,這就致使了咱們對模式關注點的誤解。因此理解的時候要注意一個模式的邊界在哪裏。一樣的,類圖並不能體現設計者的所有意圖,也會帶有誤導性,尤爲是特徵相近的幾個模式,單從類圖上是看不出區別的。有的時候,簡單的從模式的名字出發,站在抽象的高度去理解反而更簡單些(名字不是隨便取的,它包含了設計者和總結者的深度思考和理解)。算法
另外這系列文章論述的概念比較抽象,須要閱讀者有必定的開發設計經驗,對各個模式有必定的瞭解,在閱讀以前最好先過一遍各個模式。設計模式
2.相關資料微信
維基百科:https://en.wikipedia.org/wiki/Software_design_pattern (維基對各個模式的梳理比較詳細) app
GoF設計模式:https://en.wikipedia.org/wiki/Design_Patterns (Gof【Gang of Four】指《設計模式》的四位做者,他們概括了最廣爲人知的23種設計模式)框架
相關例子:https://github.com/iluwatar/java-design-patterns (這裏有不少例子,能夠直接拿來使用)函數
3.速查表
建立型模式 | ||
名稱 | 目的 | |
抽象工廠(Abstract factory) |
|
|
建造者 (Builder) |
|
|
依賴注入 (Dependency Injection) |
|
|
工廠方法 (Factory Method) |
|
|
延遲初始化 (Lazy Initialization) |
|
|
多例 (Multition) |
|
|
對象池 (Object pool) |
|
|
原型 (Prototype) |
|
|
單例 (Singleton) |
|
|
結構型模式 | ||
適配器 (Adapter,Wrapper or Translator) |
|
|
橋接 (Bridge) |
|
|
複合(Composite) |
|
|
裝飾器(Decorator) |
|
|
外觀 (Facade) |
|
|
享元 (Flyweight) |
|
http://www.cnblogs.com/zhenyulu/articles/55793.html |
標記(Marker) |
|
|
代理(Proxy) |
|
|
耦合(twin) |
|
|
行爲型模式 | ||
責任鏈(Chain of responsibility) |
|
|
命令模式(Command) |
|
|
解釋器模式(Interpreter) |
|
|
中介者模式(Mediator) |
|
|
備忘錄(Memento) |
|
|
空對象(Null object) |
|
|
觀察者(Observer or Publish/subscribe) |
|
|
僱工模式(Servant) |
|
|
規約模式(Specification) |
|
|
狀態模式(State) |
|
|
策略模式(Strategy) |
|
|
模板方法(Template Method) |
|
|
訪問者(Visitor) |
|
|
喜歡的話能夠打賞一下哦!!!
支付寶
微信