使用場景:乙個物件族有相同的約束時可以使用抽象工廠模式。舉個例子,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 使用,建立...
抽象工廠模式 常用設計模式 抽象工廠模式
提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...
抽象工廠模式 設計模式(九) 抽象工廠模式
提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...