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

2021-08-26 20:38:00 字數 2650 閱讀 2222

1、思想

提供乙個建立一系列相關或互相依賴物件的介面(抽象工廠類),而無需指定它們具體的類。

抽象工廠模式和工廠模式一樣都是屬於建立型模式,也就是說它的目的也是用來建立物件的,為什麼有了工廠模式之後還要有抽象工廠模式?

因為更方便、更合理、更加低耦合,我舉個例子來說明一下。

假設目前你的程式裡面有兩個物件,香蕉和蘋果,那麼你使用工廠模式就已經足夠了,因為它們屬於同乙個類別,都屬於水果,如果再新增乙個菠蘿產品,也只需要把菠蘿加入到你的水果工廠就足夠了。但是如果你程式裡面有四個物件,蘋果汁,蘋果派,香蕉汁,香蕉派,這四個物件正好有明確的層級關係,可以抽象為兩個層級,果汁和派,這時候你怎麼樣來建立這些物件呢,這時候工廠方法模式明顯已經不適用了,因為工廠方法模式的物件都實現了同乙個介面,這時候就可以使用抽象工廠模式了,具體是將這四個物件抽象為兩個介面,乙個果汁的介面,乙個派的介面。然後再設計乙個抽象的工廠(抽象類)abstarctfactory,裡面生產抽象的物件(也就是介面),果汁和派。我們需要兩個具體的工廠:

乙個是bananafactory繼承abstractfactory,實現生成香蕉果汁和香蕉派的方法,實際上就是生成香蕉果汁和香蕉派物件。

這樣的話,對於呼叫者來說,我在開發過程中,只需要知道我操作的物件是pie或者是juice就夠了,這樣降低了耦合。

工廠方法模式和抽象工廠模式的區別如下:

工廠方法模式只有乙個抽象產品類,而抽象工廠模式有多個。

工廠方法模式的每個具體工廠類只能建立乙個具體產品類的例項,而抽象工廠模式每個具體工廠可以建立多個具體產品類的例項。

下面看下**,首先是呼叫點。

package abstractfactory;

/** * created by songjian on 3/30/2016.

*/public class test

}

下面是抽象工廠,生產物件的抽象。

package abstractfactory;

/** * created by songjian on 3/29/2016.

*/public abstract class abstractfactory

下面是具體工廠兩個

package abstractfactory;

/** * created by songjian on 3/29/2016.

*/ @override

juice createjuice()

@override

pie createpie()

@override

pie createpie()

}

下面是物件抽象出來的介面兩個

package abstractfactory;

/** * created by songjian on 3/29/2016.

*/public inte***ce juice

package abstractfactory;

/** * created by songjian on 3/29/2016.

*/public inte***ce pie

最後是我們要生產的四個物件。

package abstractfactory;

/** * created by ken on 1/29/2016.

*/ @override

public void desc()

}

package abstractfactory;

/** * created by ken on 1/29/2016.

*/ @override

public void desc()

}

package abstractfactory;

/** * created by ken on 1/29/2016.

*/public class bananajuice implements juice

}

package abstractfactory;

/** * created by ken on 1/29/2016.

*/public class bananapie implements pie

}

2、結構圖

3、抽象工廠模式的優點和缺點

(1)抽象工廠模式的優點

i、分離介面和實現

客戶端使用抽象工廠來建立需要的物件,而客戶端根本就不知道具體的實現是誰,客戶端只是面向產品的介面程式設計而已。也就是說,客戶端從具體的產品實現中解耦。

ii、使切換產品族變得容易

因為乙個具體的工廠實現代表的是乙個產品族,所以對於不同的產品族,只需要切換不同的具體工廠。

(2)抽象工廠模式的缺點

i、不太容易擴充套件新的產品

如果需要給整個產品族新增乙個新的產品,那麼就需要修改抽象工廠,這樣就會導致修改所有的工廠實現類。

《大話設計模式》抽象工廠模式

抽象工廠模式 abstract factory 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。優點 缺點 產品1 父類 type cat struct 產品1 子類 需實現介面 type catinte ce inte ce 產品1的具體 子類1 type smallcat s...

大話設計模式 10抽象工廠模式

一 最基本的資料庫訪問方式 public class oracleuserdaoimpl public user queryuser int id public class sqlserveruserdaoimpl public user queryuser int id public class ...

大話設計模式 抽象工廠模式 簡單工廠模式結合

user表 class user public function get key else department表 class department public function get key else user表操作介面 inte ce iuser sqlserver class sqlser...