創建型模式

對象之間的常見關係

泛化關係:體現在類的繼承中,具體代碼表現在繼承非抽象類。小汽車->suv
實現關係:也是一種繼承關係,具體表現在繼承抽象類。車->小汽車

聚合關係:表示的是一種部分與整體的關係,整體由部分構成。例如,部門由員工構成
組合關係:也是一種部分和整體的關係,但是部分與整體之間存在強依賴。例如,公司和部門,公司倒閉了,部門也不存在。

關聯關係:用來定義對象之間天然的結構,自然的從屬,是一種強關聯關係。例如學校與學生,書籍和作者。在代碼中,以類的成員變量表現。
依賴關係:表示的是一種是一種調用關係,是一種臨時性的關係。代碼中,以方法的參數體現的

創建型模式

簡單工廠模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/simple_factory.html

含義:將類的創建和行爲分離,通過傳入不同的參數便能生成不同的類的實例。調用靜態方法就能創建不同的類的實例。

實例:java中格式化時間戳。
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale
locale);

優點:實現對象的創建和對象的使用分離,將對象的創建交給專門的工廠類負責,無需關心具體的實現的邏輯。通過傳入參數即可

缺點:工廠類不夠靈活,增加新的具體產品需要修改工廠類的判斷邏輯代碼,而且產品較多時,工廠方法代碼將會非常複雜。

適用情況:工廠類負責創建的對象比較少;客戶端只知道傳入工廠類的參數,對於如何創建對象不關心。

工廠方法模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/factory_method.html

含義:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。說的通俗一點吧,就是把將工廠類抽象成接口,具體的代工廠去實現此接口,同時把產品類也抽象成接口,再構造具體的產品去實現些接口。

優點:增加新的產品或功能時,無需修改原來的代碼。只需要增加新產品或者新功能的類,以及創建這個產品或者功能的類即可。

缺點:增加產品或功能時,需要同時增加兩個類。增加了複雜性。

適用情況:1,一個類不知道它所需要的類(之前),需要時再動態創建。2,將創建對象的任務教給多個工廠實現。基本和簡單工廠模式類似,只是在簡單工廠模式下抽象了具體的工廠類,降低了系統的耦合度。

抽象工廠模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/abstract_factory.html

含義:當需要創建一系列相關和相互依賴的對象時,而無需指定他們具體的類。

優點:隔離了具體類的生成,使得客戶並不需要知道什麼被創建,而且每次可以通過具體工廠類創建一個產品族中的多個對象,增加或者替換產品族比較方便,增加新的具體工廠和產品族很方便

缺點:在於增加新的產品等級結構很複雜,需要修改抽象工廠和所有的具體工廠類,對“開閉原則”的支持呈現傾斜性。

適用情況:一個系統不應當依賴於產品類實例如何被創建、組合和表達的細節;系統中有多於一個的產品族,而每次只使用其中某一產品族;屬於同一個產品族的產品將在一起使用;系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於具體實現。

單例模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/singleton.html

含義:確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例,這個類稱爲單例類,它提供全局訪問的方法

優點:提供了對唯一實例的受控訪問並可以節約系統資源

缺點:在於因爲缺少抽象層而難以擴展,且單例類職責過重

適用情況:一個系統不應當依賴於產品類實例如何被創建、組合和表達的細節;系統中有多於一個的產品族,而每次只使用其中某一產品族;屬於同一個產品族的產品將在一起使用;系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於具體實現。

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