抽象工廠模式是工廠方法模式的公升級版。抽象工廠模式的定義是為建立一組相關或相互依賴的物件提供乙個介面,而且無須指定它們的具體類,抽象工廠模式對應的是更複雜的情況。在工廠方法模式中,如有新的需求改動,只能修改工廠類,新增或修改工廠類,到但是工廠方法模式只是針對乙個系列的產品,如果是多個系列的產品呢?抽象工廠模式應運而生。
還是關於造車的例子,在工廠方法的示例的造的是汽車,是廠子的常規業務。之前的工廠主要是汽車組裝,是代加工。但是由於今年疫情的原因,進出口**受到限制。很多汽車的配件**受到限制。老闆決定自己研發汽車的配件,主要先從輪胎和油漆開始。但是之前的工廠是專門來組裝汽車的,如果要研發生產輪胎和油漆,只能改工廠完全改造。但是汽車畢竟是主營業務,而且效益也是最高的。疫情畢竟只是暫時的,主要業務恢復只是時間問題。所有老闆決定新建乙個工廠來生產汽車配件,受到汽車的等級不同,生產的配件也會有等級上的區別。分兩個車間,乙個車間生產專門生產等級a的產品,另乙個車間生成等級b的產品。
/**
* 介面
*/public inte***ce partsfactory
/** * 生產b等級的汽車配件抽象工廠
*/public abstract class abstractautopartafactory implements partsfactory
/** * 生產a等級的汽車配件實際工廠
*/public class autopartafactory extends abstractautopartafactory
@override
public abstractautoparta creatpainta()
}注:b等級**類似,這裡就不贅述了
工廠建好了,來看下即將要生產的產品,目前要生產的產品主要是油漆和輪胎兩種汽車配件,兩種配件又分為a、b兩個等級。
/**
* 汽車配件
*/public inte***ce autopart
/** * a等級汽車配件
*/public abstract class abstractautoparta implements autopart
/** * a等級油漆
*/public class painta extends abstractautoparta
@override
public void getgrade() }**
* a等級輪胎
*/public class tyrea extends abstractautoparta
@override
public void getgrade()
}
產品和工廠都準備就續剩下的就是開足馬力準備生產了
public class testabstarctfactory
}執行結果:
賓士的配件訂單.......
油漆a等級
輪胎a等級
奧拓的配件訂單.......
油漆b等級
輪胎b等級
抽象工廠模式具有良好的封裝性,上層模組並不考慮產品產生的細節,只是需要獲得產品,而且是多個產品。雖然抽象工廠的確解決了工廠方法模式不支援多系列的產品的問題。但是也存在同樣的問題。如上面的例子中,如果想增加乙個系列。那麼需要修改的抽象工廠abstractautopartafactory 和實現類以及新增乙個產品類。違背了開閉原則。這也是抽象工廠模式最大的弊端。但是,如果在同乙個系列中要擴充套件乙個新的等級的產品呢?只需要新建乙個工廠就可以實現,從這一角度又滿足了開閉原則。所以抽象工廠是橫向擴充套件容易,縱向擴充套件困難。所以在設計過程中要充分考慮縱向擴充套件的可能性,不要冗餘也不要過於保守。
抽象工廠模式真正解決是多產品多系場景。每個系列之間存在約束,每個系列產品之間也存在等級上的約束。當需要建立的物件是一系列相互關聯或相互依賴的產品族時,便可以使用抽象工廠模式。
設計模式學習之工廠模式
工廠模式,factorymethod,定義乙個工廠類的基類,基類中不再去實現具體的產品類的例項,而是將產品類的例項化工作放在其子類中進行,然後由客戶端來決定要使用那一種產品類的例項,工廠模式也要求產品類都具有相同的產品基類,這和簡單工廠模式比較相似。個人理解 工廠模式和簡單模式最大的區別是將產品類的...
設計模式之工廠模式學習
與簡單工廠模式相比,工廠模式為每個類增加了乙個工廠類。每個工廠類返回它所對應的類的物件指標。簡單工廠模式的最大優點 工廠類中包含了必要的邏輯判斷。根據客戶端的選擇條件動態的例項化相關的類。沒有在客戶端實現判斷,也就去除了與客戶端的依賴。簡單工廠模式實現計算類結構圖 工廠模式實現計算類結構圖 工廠模式...
設計模式學習之工廠模式
前言 設計模式不是某個api,是一系列經驗總結後的開發模板。工廠模式的分類 工廠方法模式 定義了乙個用於建立方法的介面,讓子類決定例項化哪乙個類。抽象方法模式 定義一系列相關或者相互依賴的介面,無需指定具體的類。是方法模式的擴充套件。工廠模式的意義 需要大量建立某類具有相同屬性的物件時,將例項化的任...