抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...
在工廠方法模式中,工廠只負責生產具體的產品,每一個具體的工廠對應著一個具體的產品,工廠方法也具有唯一性,如果有時候我們需要一個工廠方法提供多個產品而不是一個單一的產品,例如:海爾品牌不止生產海爾TV,還生產海爾冰箱,海爾空調等等,如果使用工廠方法模式就需要產生很多個工廠類來實現,而抽象工廠模式只需要一個工廠類即可生產一個品牌的多種產品。所以抽象工廠模式比工廠方法模式更加簡單,有效率。
抽象工廠模式
1.抽象工廠模式動機
可以看出,如果使用工廠方法模式,就需要創建20個具體工廠類才能生產上圖的所有產品,如果使用抽象工廠模式,只需要4個類,分別是三星廠,松下廠,TCL廠和海爾廠。
2.抽象工廠模式定義
抽象工廠模式就是定義一個可以生產對象的接口,讓子類決定要生產哪一個類的接口,工廠方法模式讓類的實例化程序延遲到子類中實行。
3.抽象工廠模式的結構圖
參與者說明:
AbstractFactory(抽象工廠)
△抽象工廠中可一個定義各組方法,每組方法對應著一個產品等級結構(一種類型如風扇)。
ConcreteFactoryA和ConcreteFactoryB(具體工廠)
△實現抽象工廠中的生成抽象產品方法,生產一組具體產品,這類產品形成一個產品族(一個品牌,如TCL),每個產品都位于某個產品的等級結構中。
AbstractProductA和AbstractProductB(抽象產品A和抽象產品B)
△為等級結構中的成員聲明抽象業務方法。
ConcreteProduct (A1/A2/B1/B2)(具體產品)
△具體產品,具有唯一的產品族和產品等級結構屬性。
4.抽象工廠模式主要代碼(一個簡單的例子)
抽象產品類
(電視)TV.cs
public interface TV
{
public void Play();
}
(風扇)Fan.cs
public interface Fan
{
public void Play();
}
具體產品類
(海爾電視)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.總結
優點
△隔離了具體類的生成,是的客戶端并不需要知道什么被創建。由于這種隔離,更換了一個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共接口,因此只需要改變具體工廠的實例,就可以在某種程度上改變整個軟件系統的行為。實現高內聚低耦合。
△當一個產品族中的多個對象被設計成一起工作的時候,抽象工廠模式能夠保證客戶端只使用同一個產品族中的對象。
△增加新的具體工廠和產品族很方便,無需要修改已有系統。
缺點
△在添加新產品對象是,難以拓展抽象工廠來生產新種類的產品,這是因為抽象工廠角色中規定了所有可能被創建的產品集合。要支持新種類的產品就意味著要對該接口進行拓展,需要修改代碼。
6.參考
《設計模式》主編:劉偉
總結
以上是生活随笔為你收集整理的抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输卵管不孕怎么治疗好
- 下一篇: shell监控java接口服务_Linu