學習設計模式有兩個意義
一
學習設計模式最重要的是了解模式的手機應用場景
編程遇到特定場景的話
要有意識聯想到設計模式
哪怕細節忘了也沒關系
翻翻書就找到了
二
提高手機APP設計的思想
學習設計模式的時候
要體會模式精妙之處
當想明白大師思想和自己的差距的時候
差距就縮短了一點兒
有的模式平淡無奇
應用卻廣泛
有的模式設計精巧
應用場景卻不易遇到
無論如何
要麼掌握工具
要麼學到思想
都是收獲
最適合簡單概括設計模式的是UML圖
收集了一個非常好的資源
分享在我的sky drive網絡硬盤上
包含
種設計模式的UML圖
cid
d
b
f
bf
f/self
aspx/
Public/books/designpatternscard
pdf
設計模式可以分為三類
behavioural
structural
creational
behavioural
種
Memento(備忘錄)
精巧程度
星
應用廣泛
星
在不破壞封裝性的前提下
捕獲一個對象的內部狀態
並在該對象之外保存這個狀態
這樣以後就可將該對象恢復到保存的狀態
Chain of Responsibility(責任鏈)
精巧程度
星
應用廣泛
星
為解除請求的發送者和接收者之間耦合
而使多個對象都有機會處理這個請求
將這些對象連成一條鏈
並沿著這條鏈傳遞該請求
直到有一個對象處理它
適合用在
一系列handler
的場景下
分為純和不純兩種
好像女孩兒也可以這麼分?
Observer(觀察者)
定義對象間的一種一對多的依賴關系
以便當一個對象的狀態發生改變時
所有依賴於它的對象都得到通知並自動刷新
因為java裡有Obserable和Observer
所以通常在java裡不會自己設計觀察者模式
Command(命令模式)
精巧程度
星
應用廣泛
星
將一個請求封裝為一個對象
從而可用不同的請求對客戶進行參數化
對請求排隊或記錄請求日志
以及支持可取消的操作
command模式用來解耦invoker和receiver
State(狀態模式)
精巧程度
星
應用廣泛
星
允許一個對象在其內部狀態改變時改變它的行為
對象看起來似乎修改了它所屬的類
OO編程如果出現多個相同的if…else條件
應該考慮用state模式重構
work flow的狀態器也是基於State模式的
Interpreter(解釋器)
精巧程度
N/A
應用廣泛
星
給定一個語言
定義它的語法的一種表示
並定義一個解釋器
該解釋器使用該表示解釋語言中的句子
Strategy(策略模式)
精巧程度
星
應用廣泛
星
定義一系列的算法
把它們一個個封裝起來
並且使它們可相互替換
本模式使得算法的變化可獨立於使用它的客戶
Iterator(迭代子)
Java Collection都可以迭代
在java上不需要格外設計iterator
Template Method(模板方法)
精巧程度
星
應用廣泛
星
見名知義
太簡單了
學過一遍就不會忘
但是這個應用非常廣泛!
Mediator(仲裁者)
精巧程度
星
應用廣泛
星
用來解耦多個peer
個人覺得這個模式多半會讓mediator十分臃腫
mediator本身需要有很清晰的設計才能使用
應用場景恐怕也少
Visitor(訪問者)
精巧程度
星
應用廣泛
星
collection裡存一個類系的entry時
使用visitor模式可以避免instance of的使用
更重要的是方便擴展類系
Structure
種
adapter(適配器)
精巧程度
星
應用廣泛
星
將一個類的接口轉換成客戶希望的另外一個接口
適配器模式使得原本由於接口不兼容而不能一起工作的類可以一起工作
Proxy(代理)
精巧程度
星
應用廣泛
星
aop是代理模式的一種發揮
Spring和Hibernate都大量使用proxy
可以引申學學JDK的dynamic proxy
模式簡單
略
Bridge(橋梁)
精巧程度
星
應用廣泛
星
Bridge在技術上是strategy的進一步發揮
但側重在實現與抽象的解耦
將抽象部分與它的實現部分分離
使它們都可以獨立地變化
Composite
精巧程度
星
應用廣泛
星
適用於樹狀結構
Decorator(裝飾)
精巧程度
星
應用廣泛
星
在java I/O中廣泛使用
為了解決
類爆炸
的問題
Facade(門面)
連個UML圖都沒有
算神馬模式?
Flyweight
精巧程度
星
應用廣泛
星
分
單純
復合
兩種
本身包含了工廠方法模式
一系列對象如果他們都有某部分屬於特定集合
就讓他們共享這個特定集合以節省資源
Creational
種
Factory Method(工廠方法)
精巧程度
星
應用廣泛
星
兩個變種
一個是根據參數創建對象
一個是factory類系對應產品類系
面向接口編程在創建模式的體現
Abstract Factory(抽象工廠)
精巧程度
星
應用廣泛
星
只有產品有兩個類系的時候才用得上
Builder
精巧程度
星
應用廣泛
星
產品分部分
並且build的過程不定的時候考慮用這種模式
是模板模式的一種發揮
Prototype(原型)
java有cloneable的支持
所以通常不需要自己設計prototype
java用prototype的時候注意深復制淺復制的問題
prototype之外的一個選擇是提供一個constructor接受本類型對象作為參數
這個方式更加實用!
singleton(單例)
保證一個類僅有一個實例
並提供一個訪問它的全局訪問點
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27396.html