抽象工厂模式解析例子
生活随笔
收集整理的這篇文章主要介紹了
抽象工厂模式解析例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
抽象工廠模式中的有以下的四種角色:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
抽象工廠(Abstract Factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統(tǒng)商業(yè)邏輯無關的。 具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調用下創(chuàng)建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統(tǒng)的商業(yè)邏輯緊密相關的。 抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。 具體產品(Concrete Product)角色:這個角色用以代表具體的產品。 抽象工廠模式就相當于創(chuàng)建實例對象的new,由于經(jīng)常要根據(jù)類生成實例對象,抽象工廠模式也是用來創(chuàng)建實例對象的,所以在需要新的事例對象時便可以考慮是否使用工廠模式。雖然這樣做可能多做一些工作,但會給你系統(tǒng)帶來更大的可擴展性和盡量少的修改量。? ? 舉例來說:生產餐具和相應食物的工廠,有兩個車間,其中一個車間用以生產餐具,一個車間用以生產相應的食物。 當消費者消費時,只需要向相應的具體工廠請求具體餐具和具體食物便可以使用餐具消費食物。 使用UML圖表示以上的描述如下: 圖1抽象工廠與具體工廠圖2抽象餐具與具體餐具(生產車間)
圖3抽象食物與具體食物 每個具體工廠生產出來的具體產品根據(jù)不同工廠的不同各不相同,但是客戶使用產品的方法是一致的。比如客戶在得到餐具和食物之后,兩者的搭配是正確的(使用湯匙喝牛奶,使用刀子切面包)。 在本例子中有3個具體工廠AKetchen, BKetchen, BKetchen,分別生產牛奶和湯匙、面包和刀、肉和叉子。牛奶、面包和肉都實現(xiàn)了食物接口。湯匙、刀和叉子都實現(xiàn)了餐具接口。 抽象工廠的接口定義如下所示; ????? package abstractFactory; public interface KetchenFactory{ ??? public Food getFood(); ??? public TableWare getTableWare(); } 抽象餐具的接口定義如下所示: package abstractFactory; public interface TableWare{ ? public String getTool(); } 抽象事物的接口定義如下所示: package abstractFactory; public interface Food{ ??? public String getEatable(); } 而具體的實現(xiàn)也非常簡單,以AKetchen為例子 具體工廠AKetchen的定義如下所示; package abstractFactory; public class AKetchen implements KetchenFactory{ ??? public Food getFood(){ ?????? return new Milk(); ??? } ??? public TableWare getTableWare(){ ?????? return new Spoon(); ??? } }
?
具體餐具(spoon)的定義如下所示: package abstractFactory; public class Spoon implements TableWare{? ??? public String getTool() { ?????? return "spoon"; ??? } } 具體食物(milk)的定義如下所示: package abstractFactory; public class Milk implements Food{ ??? public String getEatable(){ ?????? return "milk"; ??? } } 客戶端的定義如下: package abstractFactory; public class Client{ ??? public void eat(KetchenFactory k){ ?????? System.out.println("A person eat "+k.getFood().getEatable() ????????????? +" with "+k.getTableWare().getTool()+"!"); ??? } ??? public static void main(String[] args){ ?????? Client client= new Client(); ?????? KetchenFactory kf = new AKetchen(); ?????? client.eat(kf); ?????? kf=new BKetchen(); ?????? client.eat(kf); ?????? kf= new CKetchen(); ?????? client.eat(kf); ??? } } 小結:抽象工廠模式特別適合于這樣的一種產品結構:產品分為幾個系列,在每個系列中,產品的布局都是要同的,在一個系列中某個位置的產品,在另一個系列中一定有一個對應的產品。這樣的產品結構是存在的,這幾個系列中同一位置的產品可能是互斥的,它們是針對不同客戶的解決方案,每個客戶都只擇其一。 優(yōu)點:消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。 缺點:當具體產品修改時,相應的工廠類也要做相應的修改。?
如果覺得寫得好,請一定要支持一下,以給我信心和鼓勵把剩下的模式例子寫出來。 ?轉載于:https://blog.51cto.com/tianli/32545
總結
以上是生活随笔為你收集整理的抽象工厂模式解析例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在局域网内查找病毒主机
- 下一篇: java 数组排序