設計模式 抽象工廠模式

2021-08-19 07:01:47 字數 2555 閱讀 4389

使用場景:乙個物件族有相同的約束時可以使用抽象工廠模式。舉個例子,android、ios、window phone下都有簡訊軟體和撥號軟體,兩者都屬於software軟體的範疇,但是它們所在的作業系統平台不一樣,即便是同一家公司出品的軟體,其**實現邏輯也是不同的,這時候就可以考慮使用抽象工廠模式來生產android、ios、window phone下的簡訊軟體和撥號軟體。

uml類圖

主要分為4類

1、抽象工廠角色,宣告了一組用於建立一種產品的方法,每乙個方法對應一種產品。

2、具體工廠角色,實現了在抽象工廠中定義的建立產品的方法,生成一組具體產品,這些產品構成了乙個產品種類,每乙個產品都位於某個產品等級結構中,如上圖的concretefactory1和concretefactory2。

3、抽象產品角色,它為每種產品宣告介面,比如上圖的abstractproducta和abstractproductb。

4、具體產品角色,它定義具體工廠生產具體的產品物件,實現抽象產品介面中宣告的業務方法。

簡單實現

在工廠模式中的例子,q3 、q7後來經過改裝優化後,無法在一條生產線上繼續進行生產,他們之間的差別現在比較大。

主要區別是 發動機:q3是國產的 q7是原裝進口的;輪胎:q3是普通的,q7是全尺寸越野輪胎;制動系統q3是普通制動,q7是效能較好的制動系統。q3、q7對應的是一系列車,而發動機、輪胎、制動系統對應的是一系列零部件。

這時候將抽象工廠模式應用到其中,首先,汽車工廠要生產輪胎、發動機、制動系統這3種部件。

抽象工廠類

/**

* 抽象工廠

*/public abstract class ca***ctory

具體工廠類

public class q3factory extends ca***ctory 

@override

public iengine createengine()

@override

public ibrake createbrake()

}

public class q7factory extends ca***ctory 

@override

public iengine createengine()

@override

public ibrake createbrake()

}

抽象產品類

/**

* 抽象輪胎

*/public inte***ce itire

/**

* 抽象發動機

*/public inte***ce iengine

/**

* 抽象制動系統

*/public inte***ce ibrake

具體產品類

輪胎:

/**

* 具體 普通輪胎

*/public class normaltire implements itire

}

/**

* 具體 越野輪胎

*/public class suvtire implements itire

}

發動機:

/**

* 具體 國產發動機

*/public class domesticengine implements iengine

}

/**

* 具體 進口發動機

*/public class importengine implements iengine

}

制動系統:

/**

* 具體 普通制動系統

*/public class normalbrake implements ibrake

}

/**

* 具體 高階制動系統

*/public class seniorbrake implements ibrake

}

客戶端呼叫:

public class client 

}

如果此時q5系列車又進行了改進,那麼又得建立q5車型的對應的工廠,方便了擴充套件,但同時有個弊端也體現出來,那就是工廠類過多,導致類檔案非常多,實際開發中權衡利弊吧。

總結:乙個顯著的優點就是分離介面與實現,客戶端使用抽象工廠來建立需要的物件,而客戶端根本就不知道具體的實現是誰,客戶端只是面向產品的介面程式設計而已,使其從具體的產品實現中解耦,同時基於介面與實現的分離,使抽象該工廠模式在切換產品類時更加靈活,容易。

缺點:類檔案**性增加,不太容易擴充套件新的產品類,因為每當增加乙個產品類就需要修改抽象工廠,那麼所有的具體工廠類均會被修改。

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

抽象工廠模式 常用設計模式 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...

抽象工廠模式 設計模式(九) 抽象工廠模式

提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...