2012-07-19 50 views

回答

3

說明:使用真實生活和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()

Courtesy
Design Patterns

0

如果您正在尋找C#設計模式則是指:

'C#Design Patters a tutorial' - Jame W Cooper

0

現在這裏是一個答案,它會吸引很多downvotes。但我會以任何方式告訴它。

我的建議是,「不要學習設計模式!!!」

通過堅持設計模式,您限制了您的創造力。此外,一些設計模式有不好的一面,他們沒有告訴你。例如,如果不小心使用Singleton模式,可能會導致問題。

此外,國際海事組織,一些著名的設計模式,是經過一個語言創建,解決與該語言的特定問題。然而,像Python和Javascript這樣的演化語言可以非常驚人地使用,而不會陷入設計模式。

而不是學習設計模式,學習編程範例和內部概念。我就複製粘貼維基百科下面的列表,

  • 勢在必行它允許副作用,
  • 功能它不允許副作用,
  • 聲明不陳述的順序操作執行,
  • 面向對象哪組代碼與代碼修改的狀態一起,
  • 程序哪些組代碼到 功能,
  • 邏輯其具有耦合到句法和語法的特定樣式執行模型 的一個特定的風格,並
  • 符號 編程,其具有特定的語法和語法風格

當然,您可以通讀標準設計模式來獲得一些基本的想法。但是不要從A到Z學習它,它會破壞你的創造力。