抽象工廠模式:此模式提供了乙個介面,用於建立相關或者依賴物件的家族,
而不需要指定具體的實現類。
抽象工廠模式允許客戶使用抽象介面來建立一組相關的產品,
客戶類和工廠類分開,客戶需要任何產品的時候,只需要向工
廠請求即可,客戶無須修改就可以獲得新產品。這樣一來,客
戶就從具體產品中解耦。
抽象工廠模式的uml結構圖如下:
模式結構說明:
abstractfactory:抽象工廠。抽象工廠定義了乙個介面,所有的具體工廠都必須實現此介面,這個介面包含了一組方法用來生產產品。
concretefactory:具體工廠。具體工廠是用於生產不同產品族。要建立乙個產品,客戶只需要使用其中乙個工廠完全不需要例項化任何產品物件。
abstractproduct:抽象產品。這是乙個產品家族,每乙個具體工廠都能夠生產一整組產品。
product:具體產品。
設計原則:(1)多用物件組合,少用繼承
所謂物件組合,就是讓物件作為類的成員變數,通過構造函
數或者set方法給類物件的例項變數賦值。
(2)針對抽象程式設計,不針對實現程式設計
當設計乙個軟體系統的時候,要盡可能地對系統中出現的各
種食物進行抽象,從而建立基礎的抽象底層,這樣做的目的
就是讓軟體結構更加框架化、系統化,系統結構更加靈活,
以維護、易擴充套件。
抽象和具體實現的區別就在於:有了抽象,能做很多事情,
並且新增功能不會對原系統的穩定性造成影響,系統更加模
塊化,軟體更加易復用;而具體實現只能完成一件事情,並
且新增功能對原系統影響比較大,對於相同結構軟體不能復
用,大大降低了開發效率,而且程式不易擴充套件。
(3)產品物件通過工廠暴露的方法建立
使用場合:
(1)建立產品家族,相關產品集合在一起使用的時候;
(2)想要提供乙個產品類庫,並只想顯示其介面而不是實現時;
(3)通過組合的方式使用工廠時。
抽象工廠模式提供乙個介面,用於建立相關或者依賴物件的家族,而不需要
指定具體實現類。抽象工廠模式是指當有多個抽象角色時使用的一種工廠模
式。抽象工廠模式可以向客戶端提供乙個介面,使用客戶端在不必指定具體
產品的情況下,建立多個產品族中的產品物件。當有多個抽象產品角色是,
工廠方法模式已經不能滿足要求。
抽象工廠模式和工廠方法模式的區別:
(1)工廠方法模式通過繼承的方式實現應用程式的解耦,而抽象工廠模式則
通過物件組合的方式實現應用程式的解耦。
(2)工廠方法模式用來建立乙個抽象產品,具體工廠實現工廠方法來建立具
體產品,而抽象工廠模式用來建立乙個產品家族的抽象型別。
抽象工廠模式提供乙個介面,用於建立相關或者依賴物件的家族,而不需要
指定具體實現類。抽象工廠模式是指當有多個抽象角色時使用的一種工廠模
式。抽象工廠模式可以向客戶端提供乙個介面,使用客戶端在不必指定具體
產品的情況下,建立多個產品族中的產品物件。當有多個抽象產品角色是,
工廠方法模式已經不能滿足要求。
抽象工廠模式和工廠方法模式的區別:
(1)工廠方法模式通過繼承的方式實現應用程式的解耦,而抽象工廠模式則
通過物件組合的方式實現應用程式的解耦。
(2)工廠方法模式用來建立乙個抽象產品,具體工廠實現工廠方法來建立具
體產品,而抽象工廠模式用來建立乙個產品家族的抽象型別。
優點:1、 抽象工廠隔離了具體類的生成,是的客戶端不需要知道什麼被建立。所有的具體工廠都實現了抽象工廠中定義的公共介面,因此只需要改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。
2、 當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。
缺點:新增新的行為時比較麻煩。如果需要新增乙個新產品族物件時,需要更改介面及其下所有子類,這必然會帶來很大的麻煩。
Java設計模式筆記(3)抽象工廠模式
抽象工廠模式是工廠方法模式的公升級版本,在有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。package com.juno.abstractfactorypattern 抽象產品類 public abstract class abstractproducta 每個產...
設計模式學習筆記 抽象工廠模式
定義 為建立一組相關或相互依賴的物件提供一組介面,而且無需指定它們的具體類。抽象工廠模式是工廠模式的公升級版本,因為它應對的是更加複雜的業務,即當有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。由於抽象工廠類較為複雜,我覺得使用乙個具體的例子,更能形象的表達這個模式...
設計模式學習筆記 抽象工廠模式
抽象工廠開始之前,我不得不先說一句,關於工廠方法,我以為不太常用來著。而實際上,想到當年在學校,老師在教三層的時候告訴我們,service 與 dao 層必須都要繼承自介面,並提供乙個實現類,只是神秘的一笑告訴我們,這對 有好處,然而一直到了學期結束也不知道有什麼好處。大概也不知道什麼時間,越寫越多...