工廠模式(factory pattern)屬於建立型模式,分為簡單工廠模式、工廠方法模式和抽象工廠模式;有的地方是把工廠模式和抽象工廠模式區分開來,工廠模式只包括簡單工廠模式、工廠方法模式;其實怎麼劃分因人而異,最主要的是要能夠知道這幾種模式的思想,並且了解他們的異同點,知道在哪種場景下適合用哪種模式即可!
我們之前建立乙個物件,都是通過new來直接建立,例如下面的**,這樣做的缺點就是客戶端要了解手機介面下的所有實現類,只有了解了介面和實現類才能去建立具體的手機物件,並且,要是建立手機物件需要傳遞很多引數的話,那麼會給客戶端帶來很多麻煩。
//手機介面
public
inte***ce
phone
//小公尺手機
public
class
xiaomiphone
implements
phone
}
//華為手機
public
class
huaweiphone
implements
phone
}
//客戶端
public
class
client
}
類圖:
**示例:
手機介面、小公尺手機、華為手機的**跟上面的例子一致,增加了工廠類,並且對客戶端**進行修改
//生產手機的工廠
public
class
factory
elseif(
"華為手機"
.equals
(msg)
)else
}}
//客戶端
public
class
client
}
對簡單工廠模式的分析:簡單工廠模式把建立物件的能力交給工廠,客戶端要想建立乙個物件無需知道物件建立的內部細節,只需要宣告物件的型別,通過工廠來獲取我們想要的物件。工廠模式的缺點是違反ocp原則,例如我們要增加乙個產品,那麼需要修改原有的**,也就是需要修改工廠類的判斷邏輯,增加一層判斷。
類圖:**示例:
手機介面、小公尺手機、華為手機的**跟上面的例子一致,增加了抽象工廠、生產小公尺手機的工廠、生產華為手機的工廠,並且對客戶端**進行修改
//生產手機的工廠介面
public
inte***ce
factory
//生產小公尺手機的具體工廠
public
class
xiaomifactory
implements
factory
}
//生產華為手機的具體工廠
public
class
huaweifactory
implements
factory
}
//客戶端
public
class
client
}
對工廠方法模式的分析:工廠方法模式解決了簡單工廠模式出現的弊端,也就是滿足了ocp原則,例如我們要增加乙個產品,步驟就是編寫乙個產品類去實現產品介面,另外還需要編寫乙個該產品的工廠去實現抽象工廠,而不需要修改原有的**,缺點就是每擴充套件乙個產品就需要建立該產品類以及生產該產品的工廠類,會大大增加類的數量,結構複雜。
簡單工廠模式和工廠方法模式的對比
如果從結構複雜度、**複雜度、程式設計複雜度和管理上的複雜度來考慮,我們會使用簡單工廠模式,而如果從設計原則來說,譬如我們不能違反ocp原則,那麼就得選擇工廠方法模式;雖然工廠方法模式更符合設計模式的思想和原則,但由於簡單工廠模式比較簡單,所以在實際業務中,會更多的使用簡單工廠模式。
類圖:
**示例:
手機介面、小公尺手機、華為手機的**跟上面的例子一致,增加了路由器介面、小公尺路由器、華為路由器、抽象工廠、生產小公尺系列產品的工廠、生產華為系列產品的工廠,並且對客戶端**進行修改
//路由器介面
public
inte***ce
router
//小公尺路由器
public
class
xiaomirouter
implements
router
}
//華為路由器
public
class
huaweirouter
implements
router
}
//抽象工廠
public
inte***ce
factory
//小公尺工廠:生產小公尺手機、小公尺路由器
public
class
xiaomifactory
implements
factory
@override
public router makerouter()
}
//華為工廠:生產華為手機、華為路由器
public
class
huaweifactory
implements
factory
@override
public router makerouter()
}
//客戶端
public
class
client
}
對抽象工廠模式的分析:抽象工廠模式提供了乙個建立一系列相關或者相互依賴物件的介面,無需指定它們具體的類,優點是將乙個系列的產品統一到一起建立;缺點是規定了所有可能被建立的產品集合,產品族中擴充套件新的產品困難。
工廠方法模式與抽象工廠模式的區別:
工廠方法模式只能生產一種型別的產品,但是支援同等級產品的擴充套件,例如上面的手機工廠,只能生產手機,而如果要生產其他產品,例如路由器,那麼需要修改工廠類,違反ocp,如果進行的是同等級產品的擴充套件,例如要生產小公尺手機、華為手機等,不需要修改工廠類,只需要增加生產該等級產品的工廠子類即可,符合ocp。
而抽象工廠模式支援的是同一系列產品的建立,也就是同一產品族,例如小公尺系列產品,華為系列產品,抽象工廠模式解決了工廠方法模式只能建立一種型別產品的弊端,並且支援的是同一產品族的擴充套件。
應用場景:
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
c 設計模式 之 工廠模式之 工廠模式
1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...