Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(19)

          隨筆分類(107)

          隨筆檔案(141)

          文章分類(284)

          文章檔案(342)

          相冊

          收藏夾(58)

          家裝

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          零零碎碎地,學習過很多輪設計模式。總是學過就忘。后來就在google docs上做了一系列筆記,方便復習。最近把這些筆記搬家到blogjava上了,一邊搬家,一邊又復習一遍。學習設計模式有兩個意義:

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

          二、提高設計的思想。學習設計模式的時候,要體會模式精妙之處,當想明白大師思想和自己的差距的時候,差距就縮短了一點兒。

          有的模式平淡無奇,應用卻廣泛。有的模式設計精巧,應用場景卻不易遇到。無論如何,要么掌握工具,要么學到思想,都是收獲。

          ?

          最適合簡單概括設計模式的是UML圖,收集了一個非常好的資源,分享在我的sky drive網絡硬盤上,包含23種設計模式的UML圖

          http://cid-d8b11f9bf86fecfa.office.live.com/self.aspx/.Public/books/designpatternscard.pdf

          ?

          設計模式可以分為三類:behavioural, structural, creational

          behavioural 11 種

          1. Memento(備忘錄)

          精巧程度: 5星

          應用廣泛:2星

          memento適合保存/恢復狀態的場景。分為寬接口和窄接口。學習就要學窄接口!

          具體請見: http://www.aygfsteel.com/vcycyv/archive/2011/02/08/343949.html

          ?

          2. Chain of Responsibility(責任鏈)

          精巧程度: 3星

          應用廣泛: 3星

          適合用在"一系列handler”的場景下。分為純和不純兩種,好像女孩兒也可以這么分?

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/12/344167.html

          ?

          3. Observer(觀察者)

          因為java里有Obserable和Observer, 所以通常在java里不會自己設計觀察者模式。

          ?

          4. Command(命令模式)

          精巧程度:4星

          應用廣泛:3星

          command模式用來解耦invoker和receiver.

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/12/344168.html

          ?

          5. State(狀態模式)

          精巧程度:4星

          應用廣泛:3星

          OO編程如果出現多個相同的if…else條件,應該考慮用state模式重構。work flow的狀態器也是基于State模式的。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/09/343998.html

          ?

          6. Interpreter

          精巧程度: N/A

          應用廣泛: 1星

          據說只有搜索引擎才用得上這個模式,反正我每次學設計模式的時候,都把這個跳過去,就是不喜歡,抱歉。

          ?

          7. Strategy(策略模式)

          精巧程度: 2星

          應用廣泛:4星

          用來封裝不同算法。從uml圖上看和state模式一樣。 因為這個太簡單了,所以沒記筆記,這個忘不了。

          ?

          8. Iterator(迭代子)

          Java Collection都可以迭代,在java上不需要格外設計iterator。

          ?

          9. Template Method(模板方法)

          精巧程度:2星

          應用廣泛:4星

          見名知義。太簡單了,學過一遍就不會忘。但是這個應用非常廣泛!

          ?

          10. Mediator(仲裁者)

          精巧程度:4星

          應用廣泛:1星

          用來解耦多個peer。個人覺得這個模式多半會讓mediator十分臃腫,mediator本身需要有很清晰的設計才能使用。應用場景恐怕也少。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/08/343951.html

          ?

          11. Visitor(訪問者)

          精巧程度:5星

          應用廣泛:2星

          collection里存一個類系的entry時,使用visitor模式可以避免instance of的使用。更重要的是方便擴展類系。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344194.html

          ?

          Structure 7種

          12. adapter(適配器)

          精巧程度:2星

          應用廣泛:1星

          個人覺得Adaptee由第三方提供的時候才可能用上這個模式。簡單應用范圍又窄,略

          ?

          13. Proxy(代理)

          精巧程度:2星

          應用廣泛:5星

          aop是代理模式的一種發揮。Spring和Hibernate都大量使用proxy。可以引申學學JDK的dynamic proxy。模式簡單,略。

          ?

          14. Bridge

          精巧程度: 5星

          應用廣泛: 3星

          Bridge在技術上是strategy的進一步發揮,但側重在實現與抽象的解耦。

          具體見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/08/343950.html

          ?

          15. Composite

          精巧程度: 4星

          應用廣泛: 3星

          適用于樹狀結構。

          具體見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344209.html

          ?

          16. Decorator(裝飾)

          精巧程度: 5星

          應用廣泛:3星

          在java I/O中廣泛使用。為了解決“類爆炸”的問題。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/09/343997.html

          ?

          17. Facade(門面)

          連個UML圖都沒有,算神馬模式?

          ?

          18. Flyweight

          精巧程度:5星

          應用廣泛:2星

          分“單純”“復合”兩種,本身包含了工廠方法模式。一系列對象如果他們都有某部分屬于特定集合,就讓他們共享這個特定集合以節省資源。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/12/344169.html

          ?

          Creational 6 種

          19. Factory Method(工廠方法)

          精巧程度:3星

          應用廣泛:4星

          兩個變種,一個是根據參數創建對象,一個是factory類系對應產品類系。面向接口編程在創建模式的體現。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344176.html

          ?

          20. Abstract Factory(抽象工廠)

          精巧程度:5星

          應用廣泛:1星

          只有產品有兩個類系的時候才用得上。

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/15/344390.html

          ?

          21. Builder

          精巧程度: 5星

          應用廣泛: 2星

          產品分部分,并且build的過程不定的時候考慮用這種模式。是模板模式的一種發揮

          具體請見:

          http://www.aygfsteel.com/vcycyv/archive/2011/02/09/343995.html

          ?

          22. Prototype(原型)

          java有cloneable的支持,所以通常不需要自己設計prototype. java用prototype的時候注意深復制淺復制的問題。prototype之外的一個選擇是提供一個constructor接受本類型對象作為參數,這個方式更加實用!

          ?

          23. singleton(單態)

          古典的singleton分為懶漢,餓漢兩種。JDK1.5之后可以用唯一entry 的enum作為singleton的實現。好處有兩點,一是簡單。二是不需要格外處理serializable的情況

          posted on 2011-02-16 09:01 禮物 閱讀(664) 評論(0)  編輯  收藏 所屬分類: 設計模式

          只有注冊用戶登錄后才能發表評論。

          網站導航:
           
          主站蜘蛛池模板: 宜宾市| 沂源县| 怀仁县| 天柱县| 舞钢市| 沅陵县| 惠安县| 平罗县| 塘沽区| 马山县| 和政县| 渭源县| 舟山市| 安龙县| 太保市| 淮阳县| 阿坝| 大宁县| 新巴尔虎左旗| 富阳市| 潜江市| 英德市| 汕头市| 北碚区| 永嘉县| 阳泉市| 时尚| 石泉县| 新宁县| 黄浦区| 彰武县| 罗江县| 铜山县| 惠水县| 翼城县| 木兰县| 盈江县| 新营市| 保康县| 鄂托克前旗| 教育|