日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抽象工厂模式解析例子

發(fā)布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抽象工厂模式解析例子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
抽象工廠模式中的有以下的四種角色:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

?

抽象工廠(Abstract Factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統(tǒng)商業(yè)邏輯無關的。

具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調(diào)用下創(chuàng)建產(chǎn)品的實例。這個角色含有選擇合適的產(chǎn)品對象的邏輯,而這個邏輯是與應用系統(tǒng)的商業(yè)邏輯緊密相關的。

抽象產(chǎn)品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。

具體產(chǎn)品(Concrete Product)角色:這個角色用以代表具體的產(chǎn)品。

抽象工廠模式就相當于創(chuàng)建實例對象的new,由于經(jīng)常要根據(jù)類生成實例對象,抽象工廠模式也是用來創(chuàng)建實例對象的,所以在需要新的事例對象時便可以考慮是否使用工廠模式。雖然這樣做可能多做一些工作,但會給你系統(tǒng)帶來更大的可擴展性和盡量少的修改量。? ?

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

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

使用UML圖表示以上的描述如下: 1抽象工廠與具體工廠

2抽象餐具與具體餐具(生產(chǎn)車間)

3抽象食物與具體食物

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

在本例子中有3個具體工廠AKetchen BKetchen BKetchen,分別生產(chǎn)牛奶和湯匙、面包和刀、肉和叉子。牛奶、面包和肉都實現(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);

??? }

}

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

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

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

?

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

?

轉(zhuǎn)載于:https://blog.51cto.com/tianli/32545

總結(jié)

以上是生活随笔為你收集整理的抽象工厂模式解析例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。