建立型模式——抽象工廠模式
1.由來
在工廠方法模式中一種工廠只能建立一種具體產品。而一般我們需要的產品是多樣化的,比如,一臺電視機賣場,是有各種品牌的電視機的。(這時候就需要我們的抽象工廠模式)
2.定義
抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於物件建立型模式。
3.程式碼的實現
產品類:
//發動機以及型號
public interface Engine {
}
public class EngineA extends Engine{
public EngineA(){
System.out.println("製造-->EngineA");
}
}
public class EngineBextends Engine{
public EngineB(){
System.out.println("製造-->EngineB");
}
}
//空調以及型號
public interface Aircondition {
}
public class AirconditionA extends Aircondition{
public AirconditionA(){
System.out.println("製造-->AirconditionA");
}
}
public class AirconditionB extends Aircondition{
public AirconditionB(){
System.out.println("製造-->AirconditionB");
}
}
建立工廠類:
//建立工廠的介面
public interface AbstractFactory {
//製造發動機
public Engine createEngine();
//製造空調
public Aircondition createAircondition();
}
//為寶馬320系列生產配件
public class FactoryBMW320 implements AbstractFactory{
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Aircondition createAircondition() {
return new AirconditionA();
}
}
//寶馬523系列
public class FactoryBMW523 implements AbstractFactory {
@Override
public Engine createEngine() {
return new EngineB();
}
@Override
public Aircondition createAircondition() {
return new AirconditionB();
}
}
使用者購買:
public class Customer {
public static void main(String[] args){
//生產寶馬320系列配件
FactoryBMW320 factoryBMW320 = new FactoryBMW320();
factoryBMW320.createEngine();
factoryBMW320.createAircondition();
//生產寶馬523系列配件
FactoryBMW523 factoryBMW523 = new FactoryBMW523();
factoryBMW320.createEngine();
factoryBMW320.createAircondition();
}
}
4.模式的優點
- 抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被建立。由於這種隔離,更換一個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。
- 當一個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同一個產品族中的物件。這對一些需要根據當前環境來決定其行為的軟體系統來說,是一種非常實用的設計模式。
- 增加新的具體工廠和產品族很方便,無須修改已有系統,符合“開閉原則”。
5.模式的缺點
- 在新增新的產品物件時,難以擴充套件抽象工廠來生產新種類的產品,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴充套件,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。
- 開閉原則的傾斜性(增加新的工廠和產品族容易,增加新的產品等級結構麻煩)。
6.應用場景
- 一個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有型別的工廠模式都是重要的。
- 系統中有多於一個的產品族,而每次只使用其中某一產品族。
- 屬於同一個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。
- 系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現。
總結 簡單工廠模式,工廠方法模式,還是抽象工廠模式
他們都屬於工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦,所以我沒在具體使用的時候也沒有必要去完全分清,主要是達到目的——-降低耦合度。因為他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了一個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少一個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。
參考文獻:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/abstract_factory.html
相關文章
- 建立型:工廠模式-工廠方法、抽象工廠模式抽象
- 建立型設計模式——抽象工廠模式設計模式抽象
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- 建立型模式:抽象工廠模式抽象
- 工廠模式 抽象模式模式抽象
- 抽象工廠模式抽象模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 建立型:工廠模式-簡單工廠模式
- 簡單工廠模式和抽象工廠模式模式抽象
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 建立型-抽象工廠抽象
- Abstract Factory(抽象工廠)——物件建立型模式抽象物件模式
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 設計模式--工廠模式Factory(建立型)設計模式
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 抽象工廠模式-與-工廠方法模式區別抽象模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- java 抽象工廠模式Java抽象模式
- 06: 抽象工廠模式抽象模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 工廠方法模式與抽象工廠模式的區別模式抽象
- C++設計模式建立型工廠模式C++設計模式
- java設計模式–抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- 設計模式系列·抽象工廠模式設計模式抽象
- 設計模式(十三)抽象工廠模式設計模式抽象
- 設計模式(四)——抽象工廠模式設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 【Python】抽象工廠模式Python抽象模式
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 設計模式 - 抽象工廠設計模式抽象
- 抽象工廠模式(C#)抽象模式C#