摘要:簡單工廠,工廠模式和抽象工廠。不要認為簡單工廠是用就覺得一無是處,也不要覺得抽象工廠比較高大上就到處套。
工廠模式,實際上也會根據業務情景不同會有不同的實現方式。一般分為3種。簡單工廠,工廠模式和抽象工廠。顧名思義,這三種從簡單到抽象,名稱越來越高大上,實現方式肯定是越來越復雜
結論1:三種工廠的實現越來越復雜
簡單工廠public class Factory { // 定義產品編號 public int prodNo; // 構造工廠時告知工廠產品標識 public Factory(int prodNo) { this.prodNo = prodNo; } public IProduct GetProduct() { // 根據產品標識生產產品 switch (prodNo) { case prodNo1: return new ProductA(); break; case prodNo2: return new ProductB(); break; default: ... } } } // 產品A class ProductA implements IProduct { //產品屬性 //...... } //產品B class ProductB implements IProduct { //產品屬性 //...... } //產品接口 public interface IProduct { //產品方法 //...... }
簡單工廠的問題就在于swich case(或者if else)。每當新增一種產品時,你都需要去維護工廠中的判斷語句,造成該工廠類不斷增長,各種判斷擠在一起,給擴展和維護帶來麻煩。產品和工廠沒有實現完全解耦,綁定在一起
結論2:簡單工廠通過構造時傳入的標識來生產產品,不同產品都在同一個工廠中生產,這種判斷會隨著產品的增加而增加,給擴展和維護帶來麻煩
工廠模式// 工廠接口 interface IFactory { IProduct GetProduct(); } // A工廠類 class FactoryA implements IFactory { IProduct productA; public FactoryA() { this.productA = new ProductA(); } public IProduct GetProduct() //A工廠生產A產品 { return this.productA; } } //B工廠類 class FactoryB implements IFactory { IProduct productB; public FactoryB() { this.productB = new ProductB(); } public IProduct GetProduct() //B工廠生產B產品 { return this.productB; } } //產品接口 interface IProduct { //產品方法 //...... } //產品A class ProductA implements IProduct { //產品屬性 //...... } //產品B class ProductB implements IProduct { //產品屬性 //...... }
在工廠模式中,已經將工廠類分開,不再將所有產品在同一工廠中生產,解決了簡單工廠中不斷增加的switch case的問題。如再新增一個C產品,那么只需寫一個C工廠和C產品,在調用時用C工廠生產C產品即可,A和B工廠和產品完全不受影響
結論3:工廠模式無法解決產品族和產品等級結構的問題
抽象工廠實現不同的產品族,并且實現產品等級結構
// 工廠接口,即抽象工廠 interface IFactory { IFridge CreateFridge(); IAirCondition CreateAirCondition(); } // 三星的工廠,生產三星的產品族 class SamsungFactory implements IFactory { public IAirCondition CreateAirCondition() { // 三星的工廠生產三星的空調 return new SamsungAirCondition(); } public IFridge CreateFridge() { // 三星的工廠生產三星的冰箱 return new SamsungFridge(); } } // 格力的工廠,生產格力的產品族 class GreeFactry implements IFactory { public IAirCondition CreateAirCondition() { // 格力的工廠生產格力的空調 return new GreeAirCondition(); } public IFridge CreateFridge() { // 格力的工廠生產格力的冰箱 return new GreeFridge(); } } // 冰箱產品接口 interface IFridge { // 冰箱產品接口 // 冰箱的action } // 空調接口 interface IAirCondition { // 空調產品接口 // 空調的action } // 三星的冰箱 public class SamsungFridge implements IFridge { // 三星冰箱的action和property } // 格力的冰箱 public class GreeFridge : IFridge { // 格力冰箱的action和property } // 三星的空調 public class SamsungAirCondition implements IAirCondition { // 三星空調的action和property } // 格力的空調 public class GreeAirCondition implements IAirCondition { / /格力空調的action和property }
在工廠模式中,一個工廠生產一個產品,所有的具體產品是由同一個抽象產品派生的,不存在產品等級結構和產品族的概念;而在抽象工廠中,同一個等級的產品是派生于一個抽象產品(即產品接口),一個抽象工廠派生不同的具體工廠,每個具體工廠生產自己的產品族(包含不同產品等級)
結論4:工廠模式中,一個工廠生產一個產品,所有產品派生于同一個抽象產品(或產品接口);而抽象工廠模式中,一個工廠生產多個產品,它們是一個產品族,不同的產品族的產品派生于不同的抽象產品(或產品接口)
三種工廠模式關鍵點三種工廠的實現是越來越復雜的
簡單工廠通過構造時傳入的標識來生產產品,不同產品都在同一個工廠中生產,這種判斷會隨著產品的增加而增加,給擴展和維護帶來麻煩
工廠模式無法解決產品族和產品等級結構的問題
抽象工廠模式中,一個工廠生產多個產品,它們是一個產品族,不同的產品族的產品派生于不同的抽象產品(或產品接口)
工廠模式問答在上面的代碼中,都使用了接口來表達抽象工廠或者抽象產品,那么可以用抽象類嗎?有何區別?
從功能上說,完全可以,甚至可以用接口來定義行為,用抽象類來抽象屬性。抽象類更加偏向于屬性的抽象,而用接口更加偏向行為的規范與統一。使用接口有更好的可擴展性和可維護性,更加靈活實現松散耦合,所以編程原則中有一條是針對接口編程而不是針對類編程
到底何時應該用工廠模式
根據具體業務需求。不要認為簡單工廠是用switch case就覺得一無是處,也不要覺得抽象工廠比較高大上就到處套。我們使用設計模式是為了解決問題而不是炫技,所以根據三種工廠模式的特質,以及對未來擴展的預期,來確定使用哪種工廠模式
說說你在項目中工廠模式的應用
一個旅游產品的B2B網站,根據不同類型的業務形態,產品也是不同的,有國內跟團,出境跟團,國內自由行,出境自由行,郵輪五種產品,并且后面可能還會有門票,酒店,機票等等產品,其中有些聯系也有些區別
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66493.html
摘要:與以往的使用的方式不同,工廠模式使用工廠實例化對象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個接口,用于創建相關或依賴對象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設計模式的形式將與其他篇博文不太一樣,這里我們將從一個問題入手,逐步了解到簡單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內容較多,所以篇幅有點長,請耐心閱讀。 為什么要使用工廠模式? 在 OO ...
摘要:我認為按書上的順序比較好理解因為簡單靜態工廠模式是在工廠方法模式上縮減,抽象工廠模式是在工廠方法模式上再增強。所以我就先講工廠方法模式了。抽象工廠模式抽象工廠模式就比較復雜了,我們一般的應用都寫不到。 前言 只有光頭才能變強 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 昨天寫了單例模式了,今天是時候寫工廠模式啦~ 工廠模式我個人認為其實比...
摘要:一簡單工廠定義簡單工廠其實并不屬于種設計模式之一,該模式是工廠方法模式的弱化或者說是工廠方法模式的一種特例,因為簡單,所以稱為簡單工廠模式,也叫做靜態工廠模式。 一、簡單工廠 定義 簡單工廠其實并不屬于23種GOF設計模式之一,該模式是工廠方法模式的弱化(或者說是工廠方法模式的一種特例),因為簡單,所以稱為簡單工廠模式(Simple Factory Pattern),也叫做靜態工廠模式...
摘要:又稱為多態性工廠模式或虛擬構造子模式。簡單工廠模式簡單工廠模式簡單工廠模式又稱為靜態工廠方法模式,它屬于類創建型模式。多態性設計工廠方法模式之所以又被稱為多態工廠模式,是因為所有的具體工廠類都具有同一抽象父類。 點擊進入我的博客 2.1 簡單工廠模式 2.1.1 工廠模式的幾種形態 工廠模式主要用一下幾種形態: 簡單工廠(Simple Factory):專門定義一個類來負責創建其他...
閱讀 888·2021-11-15 11:38
閱讀 2519·2021-09-08 09:45
閱讀 2819·2021-09-04 16:48
閱讀 2569·2019-08-30 15:54
閱讀 935·2019-08-30 13:57
閱讀 1623·2019-08-29 15:39
閱讀 501·2019-08-29 12:46
閱讀 3525·2019-08-26 13:39