java設計模式學習筆記 抽象工廠模式

2021-06-18 22:54:05 字數 2253 閱讀 4762

抽象工廠模式:此模式提供了乙個介面,用於建立相關或者依賴物件的家族,

而不需要指定具體的實現類。

抽象工廠模式允許客戶使用抽象介面來建立一組相關的產品,

客戶類和工廠類分開,客戶需要任何產品的時候,只需要向工

廠請求即可,客戶無須修改就可以獲得新產品。這樣一來,客

戶就從具體產品中解耦。

抽象工廠模式的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 層必須都要繼承自介面,並提供乙個實現類,只是神秘的一笑告訴我們,這對 有好處,然而一直到了學期結束也不知道有什麼好處。大概也不知道什麼時間,越寫越多...