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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在工廠方法模式中,工廠只負責生產(chǎn)具體的產(chǎn)品,每一個具體的工廠對應(yīng)著一個具體的產(chǎn)品,工廠方法也具有唯一性,如果有時候我們需要一個工廠方法提供多個產(chǎn)品而不是一個單一的產(chǎn)品,例如:海爾品牌不止生產(chǎn)海爾TV,還生產(chǎn)海爾冰箱,海爾空調(diào)等等,如果使用工廠方法模式就需要產(chǎn)生很多個工廠類來實現(xiàn),而抽象工廠模式只需要一個工廠類即可生產(chǎn)一個品牌的多種產(chǎn)品。所以抽象工廠模式比工廠方法模式更加簡單,有效率。

抽象工廠模式

1.抽象工廠模式動機

可以看出,如果使用工廠方法模式,就需要創(chuàng)建20個具體工廠類才能生產(chǎn)上圖的所有產(chǎn)品,如果使用抽象工廠模式,只需要4個類,分別是三星廠,松下廠,TCL廠和海爾廠。

2.抽象工廠模式定義

抽象工廠模式就是定義一個可以生產(chǎn)對象的接口,讓子類決定要生產(chǎn)哪一個類的接口,工廠方法模式讓類的實例化程序延遲到子類中實行。

3.抽象工廠模式的結(jié)構(gòu)圖

參與者說明:

AbstractFactory(抽象工廠)

△抽象工廠中可一個定義各組方法,每組方法對應(yīng)著一個產(chǎn)品等級結(jié)構(gòu)(一種類型如風扇)。

ConcreteFactoryA和ConcreteFactoryB(具體工廠)

△實現(xiàn)抽象工廠中的生成抽象產(chǎn)品方法,生產(chǎn)一組具體產(chǎn)品,這類產(chǎn)品形成一個產(chǎn)品族(一個品牌,如TCL),每個產(chǎn)品都位于某個產(chǎn)品的等級結(jié)構(gòu)中。

AbstractProductA和AbstractProductB(抽象產(chǎn)品A和抽象產(chǎn)品B)

△為等級結(jié)構(gòu)中的成員聲明抽象業(yè)務(wù)方法。

ConcreteProduct (A1/A2/B1/B2)(具體產(chǎn)品)

△具體產(chǎn)品,具有唯一的產(chǎn)品族和產(chǎn)品等級結(jié)構(gòu)屬性。

4.抽象工廠模式主要代碼(一個簡單的例子)

抽象產(chǎn)品類

(電視)TV.cs

public interface TV

{

public void Play();

}

(風扇)Fan.cs

public interface Fan

{

public void Play();

}

具體產(chǎn)品類

(海爾電視)HaiErTV.cs

public class HaiErTV : TV

{

public void Play()

{

Console.WriteLine("海爾電視");

}

}

(海爾風扇)HaiErFan.cs

public class HaiErFan : Fan

{

public void Play()

{

Console.WriteLine("海爾風扇");

}

}

(TCL電視)TCLTV.cs

public class TCLTV : TV

{

public void Play()

{

Console.WriteLine("TCL電視");

}

}

(TCL風扇)TCLFan.cs

public class TCLFan : Fan

{

public void Play()

{

Console.WriteLine("TCL風扇");

}

}

抽象工廠類

AbsractFactory.cs

public interface AbstractFactory

{

public TV CreateTV();

public Fan CreateFan();

}

具體工廠類

(海爾)HaiErFactory.cs

public class HaiErFactory : AbstractFactory

{

public TV CreateTV()

{

return new HaiErTV();

}

public Fan CreateFan()

{

return HaiErFan();

}

}

(TCL)TCLFactory.cs

public class TCLFactory : AbstractFactory

{

public TV CreateTV()

{

return new TCLTV();

}

public Fan CreateFan()

{

return TCLFan();

}

}

測試

AbstractFactory factory;/*定義抽象工廠*/

TV tv;/*定義抽象電視*/

Fan fan;/*定義抽象風扇*/

factory = new HaiErFactory();

tv = factory.CreateTV();

tv.Play();/*海爾電視*/

fan = factory.CreateFan();

fan.Play();/*海爾風扇*/

5.總結(jié)

優(yōu)點

△隔離了具體類的生成,是的客戶端并不需要知道什么被創(chuàng)建。由于這種隔離,更換了一個具體工廠就變得相對容易。所有的具體工廠都實現(xiàn)了抽象工廠中定義的那些公共接口,因此只需要改變具體工廠的實例,就可以在某種程度上改變整個軟件系統(tǒng)的行為。實現(xiàn)高內(nèi)聚低耦合。

△當一個產(chǎn)品族中的多個對象被設(shè)計成一起工作的時候,抽象工廠模式能夠保證客戶端只使用同一個產(chǎn)品族中的對象。

△增加新的具體工廠和產(chǎn)品族很方便,無需要修改已有系統(tǒng)。

缺點

△在添加新產(chǎn)品對象是,難以拓展抽象工廠來生產(chǎn)新種類的產(chǎn)品,這是因為抽象工廠角色中規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合。要支持新種類的產(chǎn)品就意味著要對該接口進行拓展,需要修改代碼。

6.參考

《設(shè)計模式》主編:劉偉

總結(jié)

以上是生活随笔為你收集整理的抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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