抽象工廠模式解析例子

2021-08-17 01:57:43 字數 1821 閱讀 6722

抽象工廠模式中的有以下的四種角色:

抽象工廠(abstract factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。

抽象產品(abstract product)角色:擔任這個角色的類是工廠方法模式所建立的物件的父類,或它們共同擁有的介面。

具體產品(concrete product)角色:這個角色用以代表具體的產品。

抽象工廠模式就相當於建立例項物件的new,由於經常要根據類生成例項物件,抽象工廠模式也是用來建立例項物件的,所以在需要新的事例物件時便可以考慮是否使用工廠模式。雖然這樣做可能多做一些工作,但會給你系統帶來更大的可擴充套件性和盡量少的修改量。

舉例來說:生產餐具和相應食物的工廠,有兩個車間,其中乙個車間用以生產餐具,乙個車間用以生產相應的食物。

當消費者消費時,只需要向相應的具體工廠請求具體餐具和具體食物便可以使用餐具消費食物。

使用uml圖表示以上的描述如下:

圖1抽象工廠與具體工廠

圖2抽象餐具與具體餐具(生產車間)

圖3抽象食物與具體食物

每個具體工廠生產出來的具體產品根據不同工廠的不同各不相同,但是客戶使用產品的方法是一致的。比如客戶在得到餐具和食物之後,兩者的搭配是正確的(使用湯匙喝牛奶,使用刀子切麵包)。

在本例子中有3個具體工廠aketchen, bketchen, bketchen,分別生產牛奶和湯匙、麵包和刀、肉和叉子。牛奶、麵包和肉都實現了食物介面。湯匙、刀和叉子都實現了餐具介面。

抽象工廠的介面定義如下所示;

package abstractfactory;

public inte***ce ketchenfactory

抽象餐具的介面定義如下所示:

package abstractfactory;

public inte***ce tableware

抽象事物的介面定義如下所示:

package abstractfactory;

public inte***ce food

而具體的實現也非常簡單,以aketchen為例子

具體工廠aketchen的定義如下所示;

package abstractfactory;

public class aketchen implements ketchenfactory

public tableware gettableware()}

具體餐具(spoon)的定義如下所示:

package abstractfactory;

public class spoon implements tableware

}具體食物(milk)的定義如下所示:

package abstractfactory;

public class milk implements food

}客戶端的定義如下:

package abstractfactory;

public class client

public static void main(string args)

}小結:抽象工廠模式特別適合於這樣的一種產品結構:產品分為幾個系列,在每個系列中,產品的布局都是要同的,在乙個系列中某個位置的產品,在另乙個系列中一定有乙個對應的產品。這樣的產品結構是存在的,這幾個系列中同一位置的產品可能是互斥的,它們是針對不同客戶的解決方案,每個客戶都只擇其一。

優點:消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。

缺點:當具體產品修改時,相應的工廠類也要做相應的修改。

如果覺得寫得好,請一定要支援一下,以給我信心和鼓勵把剩下的模式例子寫出來。

附件:

抽象工廠模式解析例子

size large 抽象工廠模式中的有以下的四種角色 抽象工廠 abstract factory 角色 擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。抽象產品 abstract product 角色 擔任這個角色的類是工廠方法模式所建立的物件的父類,或它們共同擁有的介面。具體產...

抽象工廠模式例子

兩種抽象產品 水果 蔬菜 public inte ce fruit public inte ce veggie 四種具體產品 北方水果,熱帶水果,北方蔬菜,熱帶蔬菜 northern fruit public class northernfruit implements fruit public s...

抽象工廠模式解析

學習了抽象工廠模式,我把自己所理解的抽象工廠模式拿出來和大家分享。1.首先什麼是抽象工廠模式?抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個...