Java開發中的23種設計模式


在java中,學習一些設計模式,可大大提高我們的編程效率,而且可以簡化代碼,下面這篇文章,是我轉載的,希望能對大家有幫助:


一、學習設計模式最重要的是瞭解模式的手機應用場景。編程遇到特定場景的話,要有意識聯想到設計模式,哪怕細節忘了也沒關係,翻翻書就找到了

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

    保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章