0 設計模式概述

抽象工廠英文 abstract factory

名詞需要分成兩個部分讀,抽象 工廠。

首先這是一個工廠,其次工廠是抽象的。

常用於需要針對不同情況創建不同組(一組包含多個)對象的情況中。

如:

如gui應用中的首頁中都有更換皮膚的功能,更換皮膚通常需要修改導航欄的樣式,首頁背景圖等。假設這些樣式封裝在三個不同的對象中,對象導航欄和對象首頁。(爲了讓表述簡單這裏只分兩個部分)

0 設計模式概述

 Widget中文名即窗口組件。

客戶端是Client,其中調用的是WidgetFactory接口和Index接口,Navigation接口。

而WidgetFactory接口有兩個實現類,分別是藍色組件和黑色組件,因爲接口規定了創建首頁index和創建導航欄navigation兩個方法,所以對應的兩個工廠實現類也有兩個對應創建方法,分別是創建自己工廠對應樣式的組件。

創建的對應實現類也有對應的接口。

這樣如果在調用端需要修改組件樣式的話,只需要在聲明工廠的地方切換實現類即可。

這裏要注意的是,對應的工廠實現類實例通常是單例的,因爲整個進程中通常只需要一個工廠實例就夠了。而產品要看實際情況。

抽象化類圖:

0 設計模式概述
concrete是具體實現的意思,即實現類。如果是java的,可以當做是下圖

0 設計模式概述

定義了工廠接口類和創建方法的接口。實現類實現了工廠接口和對應方法,這些產品都有對應的接口。

在客戶端中值調用接口類,而產品類的選擇是在工廠中完成的,客戶端中接觸不到具體的實例化過程。

模式優點:

分離了具體類:產品的具體實現被分割出來,被工廠封裝起來, 不出現在具體客戶端代碼中。

易於切換:如果要切換樣式,在聲明的地方切換工廠實現類即可。

一致性:可以統一管理一組產品,產品之間可以協同工作。

模式缺點:

不易於擴展新的產品:如果需要新增一個表單樣式,那麼抽象工廠類需要加接口,所有的實現類也需要加接口。

缺點修復:

可以爲接口類只定義一個接口方法:make(Parameter),參數可以是一個類,標識符或者字符串,而創建的產品根據參數變化而變化。這樣添加新的產品只需要在實現方法中做調整。

但是這個涉及到一個類型向下轉換的問題,返回類中可能存在一些安全檢查和強制轉換的問題。

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