2014年5月15日 星期四

Design Patterns 筆記 - Overview

重新學習JAVA中,想到大學旁聽課程時老師提到的 Design Patterns (設計模式),這是前輩們花很多時間總結的各種"輪子",對於物件導向新手而言是提升能力的捷徑!

以下內容主要從 tutorialspoint 的 Design Patterns Tutorial in JAVA翻譯而來,
輔佐一些額外資訊,請各位看官不吝惜指教。

維基百科云:「Design Patterns 是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。」

Design Patterns 代表有經驗的物件導向(object-oriented)程式開發者所用的最好的實踐方式
Design patterns 是軟體開發者在設計軟體中出現的一般性問題,所提出的解決方法。
無數的軟體開發者經過長時間的嘗試、走了許多彎路,才得到這些模式。

什麼是四人幫 (Gang of Four)(GOF)?

1994年,四位作者 (Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides) 
出版了「設計模式:可復用面向對象軟體的基礎 (Design Patterns - Elements of Reusable Object-Oriented Software) 」一書,從此把 Design Pattern 的概念帶進了軟體開發之中。這四位作者被合稱為四人幫 Gang of Four (GOF)


就是這一本 XD

根據GOF所提出的概念,Design Patterns 主要是根據下列物件導向設計的原則而來:

  • Program to an interface not an implementation
    介面設計程式,而非用時作寫程式。
  • Favor object composition over inheritance
    優先使用物件複合技術,少用繼承。 (我承認,我沒什麼體會...)


Design Pattern 的用處

Design Patterns在軟體發展中有兩個主要的好處!

1. 開發人員的共同交流平台

Design patterns 提供標準術語 跟 確切的問題或程式背景。
舉例來說,一個單例模式(singleton)意味著使用擔一個物件,所以每個熟悉單一物件模式的開發人員可以使用單一物件來告訴告訴別的開發者:這個程式是採用單例模式(singleton)。

2. BEST PRACTICES

Design patterns 經過非常長久的演化,在軟體開發時,能對某些特定問題提供幾乎是最好的解法(設計方式)。而學習這些模式能幫助開發新手快速方便的學習軟體設計!



Design Pattern的形式

根據 GoF 的書,他們提出了 23個 Design Patterns。(下表1~3種)
對這23個模式,GoF把他們分為三類: 建立型、結構型和行為型模式。


除此之外,我們也會討論另一種 Design Patterns 的類別:
J2EE design patterns。(下表第4種)

S.N.Pattern & Description
1建立型模式 (Creational Patterns)
這些模式提供能讓開發人員在建立物件時,
隱藏他們的建立邏輯(不會直接使用new() 函式來建立物件)。
當要決定哪些物件要被建立使用時,讓程式更彈性化。
2結構型模式 (Structural Patterns)
著重類別跟物件的組成。
繼承的概念被用來組成介面、跟定義物件的組成方式,
以達成更新的功能(更大的結構)。
3行為型模式 (Behavioral Patterns)
專門描述物件之間的溝通與合作。
4J2EE Patterns
這些模式專門著重於使用者介面層。
由 Sun(昇陽) Java Center 所提出。.

各個 Design Patterns 的分類條列在 
Design Patterns - Categories 分類條列,請參閱!


Reference:

1. tutorialspoint
2. 王者歸來:品味Java的21種設計模式



If you want to use (copy, paste or quote) my original article, please contact me through email (autek.roy@gmail.com). If there is any mistake or comment, please let me know. :D

如要使用(複製貼上或轉載)作者原創文章,請來信跟我聯絡 (autek.roy@gmail.com)。如果有發現任何的錯誤與建議請留言或跟我連絡。 : )

沒有留言:

張貼留言

請留下您的任何想法或建議!
Please leave any thought or comment!