我想學習設計模式與實時示例。所以任何人都可以提出我可以從哪裏開始。設計模式與實時示例
回答
說明:使用真實生活和Java API示例添加簡短定義。
創力
你怎麼想創建的對象?
原型:甲完全初始化實例被複制或克隆
實施例:國際象棋遊戲的初始狀態
java.lang.Object#clone()
生成器 - 分隔的構造複雜的對象從其表示,以便相同的施工過程可以創建不同的代表
例如:廚房是工廠,廚師是生成器在那裏服務員告訴廚師「與奶酪,洋蔥比薩餅」。這裏廚師暴露了屬性,但隱藏了實現。
- java.lang.StringBuilder中
的Singleton - 其中只有一個單個實例可以存在
實施例A類:一個國家的總統
- java.lang.Runtime中#getRuntime()
工廠方法 - 創建多個派生類的實例。
例如:在一個組織中,HR用作工廠方法。這裏開發團隊請求資源類型需要HR。根據請求類型,HR爲開發團隊提供資源。
- java.util.Calendar中的#的getInstance()
抽象工廠 - 創建的類
幾個家庭的實例 例如:惠普,三星和戴爾筆記本電腦採用英特爾和AMD處理器。
- javax.xml.parsers.DocumentBuilderFactory中的newInstance#()
Factory Method vs Abstract Factory
結構
這種設計模式是所有關於類和對象組成,即你怎麼想構建軟件組件。
代理 - 代表另一個對象
例如對象:支票簿葉,信用卡,借記卡是代理的錢和客戶代表訂購產品。
- java.rmi。*,實際上是整個API。
複合 - 提供一個統一的接口到葉和複合材料。
示例:操作系統中的文件系統,目錄是複合文件,文件是樹葉。系統調用Open
是複合和葉子的單一接口。
修飾器 - 爲葉提供附加功能,同時提供統一的界面。
例如:1)在訂單上添加折扣2)槍是它自己的致命武器。但是你可以運用某些「裝飾」來使它更加準確,沉默和具有毀滅性。
- 的java.io.InputStream,爲OutputStream,Reader的所有子類和 作家有一個構造採取相同類型的實例。
門面 - 簡化多個複雜的部件與單個接口
實施例:控制面板
- javax.faces.context.ExternalContext,其內部使用 ServletContext中,HttpSession中,HttpServletRequest的,HttpServletResponse的, et
適配器 - 爲接口提供不同的接口。
示例:電源適配器
- java.util.Arrays中#asList()
飛錘 - 用於高效地共享
實施例A細粒度實例:撥號音
- java.lang.Integer#valueOf(int)(同樣在布爾,字節,字符, 長和長)
行爲
這種設計模式是所有關於類的對象通信即如何你想在軟件的行爲?責任的
鏈 - 傳遞對象的鏈
實施例之間的請求的一種方法:
- javax.servlet.Filter的#的doFilter()
迭代器 - 按順序訪問集合的元素
Ex充足的:在電視上一首/下一按鈕
- java.util.Iterator的&的所有實現的java.util.Enumeration
國家 - 其狀態改變時
例改變對象的行爲:風扇牆控制
觀察者 - 一種通知更改爲多個類的方法
例如:招標或拍賣
- 發佈/訂閱JMS API
遊客 - 定義一個新的操作的一類,而不改變
例:出租車
模板 - 推遲算法到子類的確切步驟
示例:藍圖
- java.io.InputStream,java.io.OutputStream,java.io.Reader和java.io.Writer的所有非抽象方法。
- java.util.AbstractList,java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法。
- javax.servlet.http。HttpServlet,默認情況下所有的doXXX()方法向響應發送HTTP 405「方法不允許」錯誤。你可以自由地實現任何一個或其中任何一個。
- JmsTemplate的HibernateTemplate的和的JdbcTemplate春季
命令 - 封裝的命令請求作爲對象
示例:「客人檢查」在晚餐是命令模式的一個例子。服務員或女服務員從顧客處接受訂單或命令,並將該訂單寫在支票上。訂單然後排隊等候一個短訂單的廚師。請注意,每個服務員使用的「檢查」鍵不依賴於菜單,因此他們可以支持命令來烹飪許多不同的項目。
- 一個java.lang.Runnable的所有實現
備忘錄 - 捕捉和還原對象的內部狀態
舉例:保存狀態在遊戲&撤銷/重做操作在Windows
- java.io.Serializable的所有實現
中保 - 定義類
實施例之間簡化通信:空中交通管制(ATC)
策略 - 甲策略定義了一組可被可互換地使用的算法。
實施例:運輸模式
- 了java.util.Comparator#比較(),由其他類別中執行#排序()。
- javax.servlet.http.HttpServlet,service()和所有的doXXX()方法都使用HttpServletRequest和HttpServletResponse,實現者必須處理它們(而不是將它們作爲實例變量!)。
- javax.servlet.Filter的#的doFilter()
如果您正在尋找C#設計模式則是指:
'C#Design Patters a tutorial' - Jame W Cooper
現在這裏是一個答案,它會吸引很多downvotes。但我會以任何方式告訴它。
我的建議是,「不要學習設計模式!!!」
通過堅持設計模式,您限制了您的創造力。此外,一些設計模式有不好的一面,他們沒有告訴你。例如,如果不小心使用Singleton模式,可能會導致問題。
此外,國際海事組織,一些著名的設計模式,是經過一個語言創建,解決與該語言的特定問題。然而,像Python和Javascript這樣的演化語言可以非常驚人地使用,而不會陷入設計模式。
而不是學習設計模式,學習編程範例和內部概念。我就複製粘貼維基百科下面的列表,
- 勢在必行它允許副作用,
- 功能它不允許副作用,
- 聲明不陳述的順序操作執行,
- 面向對象哪組代碼與代碼修改的狀態一起,
- 程序哪些組代碼到 功能,
- 邏輯其具有耦合到句法和語法的特定樣式執行模型 的一個特定的風格,並
- 符號 編程,其具有特定的語法和語法風格
當然,您可以通讀標準設計模式來獲得一些基本的想法。但是不要從A到Z學習它,它會破壞你的創造力。
- 1. 設計模式實例
- 2. 標準庫中單例設計模式實現的示例
- 3. 全球Smarty實例的設計模式
- 4. 單例設計模式實現
- 5. Singleton設計模式示例請
- 6. 實用紅寶石設計模式的片段/示例?
- 7. 設計模式的例子
- 8. 如何實現「單實例」式設計?
- 9. 務實的設計模式
- 10. iOS設計模式實現
- 11. 模型視圖控制器設計模式代碼示例代碼示例
- 12. 測試設置例程設計模式
- 13. C++設計模式暗示
- 14. 演示設計模式
- 15. Automapper與Builder設計模式
- 16. 設計時序圖和設計模式
- 17. 設計師設計模式與訪客設計模式的區別
- 18. 如何使用此示例在WCF中實現工廠設計模式?
- 19. 根據對象實例顯示自定義編輯器的設計模式?
- 20. 使用JavaScript設計模式實現的一些示例是什麼?
- 21. 模擬器上的單身模式與真實設備上的單例模式?
- 22. 實踐設計模式的評估/案例研究
- 23. 設計模式 - 將Enum鏈接到類的實例
- 24. 要實例化的類的設計模式一旦
- 25. 創建同一類的不同實例,哪種設計模式?
- 26. 工廠設計模式:工廠可以保存實例嗎?
- 27. 用於創建子類對象實例的設計模式
- 28. 使用實例化類的PHP設計模式
- 29. 設計模式濫用的例子
- 30. 的Java設計模式例子
我真的很喜歡Head First Design Patterns。好有趣! – atamanroman 2012-07-19 07:09:37