設計模式 抽象工廠模式

2021-08-20 11:53:12 字數 1790 閱讀 9441

抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。根據黎克特制替換原則,任何接受父型別的地方,都應當能夠接受子型別。

嗯。。。看文字很繞口, 先直接往下看吧。。。

簡單工廠:乙個產品抽象類,具體的產品去繼承這個抽象類; 乙個工廠類

工廠方法:乙個產品抽象類,具體的產品去繼承這個抽象類; 乙個工廠抽象類,具體產品對應的工廠類去繼承這個工廠抽象類。

抽象工廠:多個產品抽象類(一套產品的抽象類),具體的產品去繼承這個抽象類; 乙個工廠抽象類,每個具體的工廠類去繼承這個工廠抽象類,並且每個具體工廠類能完整建立某一套的具體產品(即多個產品抽象類的子類)

下面簡單舉乙個例子, 比如說要造汽車, 一輛完整的汽車包含發動機、輪子、方向盤、座椅等, 但是發動機、輪子、方向盤又有不同的品牌, 所以把這些產品抽象出來,就有了發動機抽象類,輪子抽象類,座椅抽象類, 這就是上面提到的多個產品抽象類, 為了方便, 這裡只寫了兩個產品的抽象類:

public abstract class engine 

public abstract class wheel

然後就有不同的造車的公司了,這就是車的品牌, 比如一汽大眾、比亞迪、奧迪, 但他們都是屬於造車, 所以都繼承自乙個造車工廠類, 工廠可以把不同的零件組裝起來:

public abstract class factory
接下來是具體的產品類(只貼出了byd, 以免篇幅過長):

public class bydenginee extends enginee

}

public class bydwheel extends wheel

}

接下來是具體的工廠類(只貼出了比亞迪汽車工廠, 支援國產):

public class bydfactory extends factory

@override

public void assemblewheel()

}

為了避免篇幅太長,上面只貼出了部分**,主要為了講述清楚抽象工廠模式,其他的請自行補充,**都很簡單。

好了,當我們需要在業務**中去創造汽車時, 只需要如下呼叫:

factory factory = new bydfactory();

factory.assembleenginee();

factory.assemblewheel();

這樣, 我們想要製造的汽車就造好了。如果我們想造其他品牌的汽車, 我們只需要把第一句替換一下,替換為對應品牌的汽車製造工廠即可, 儘量減少了對原有**的修改。

看到這裡,不知道大家有沒有發現,假如是造比亞迪汽車, 如果我們想換引擎, 比如說, 現在我們想換成奧迪的汽車引擎,或者其他品牌的汽車引擎, 或者最新型的國產引擎a, 那麼, 我們只需要在比亞迪工廠的assembleenginee()方法中修改為對應的例項化物件即可,這樣,我們就實現了對不同引擎類的復用與組合。

通過抽象工廠模式, 我們就可以自由組合我們想生產的具體產品, **也得到了解耦,**可復用和可維護性也得到提公升。

優點:

對於大型專案,工廠和產品都比較多的專案, 較好的解耦了**,充分的使用了**六大設計原則之開放封閉原則和依賴倒轉原則,並且可以實現產品的靈活組合, 提公升了**復用

缺點:

需要管理的模擬較多

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

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

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

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

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

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