定義spa
工廠模式是爲建立對象提供接口,以便把建立對象的具體過程隔離起來,封裝變化,提升建立的通用性。.net
分類3d
工廠模式包含如下三種分類:代理
簡單工廠code
簡單工廠又叫靜態工廠方法(Static Factory Method),它是把產品的建立移到統一的工廠方法中去,而不是把產品建立依賴具體產品使用new來建立。對象
類圖以下:blog
場景:咱們須要生產共享單車,目前市場上有膜拜單車與小黃車兩種產品可供選擇。市場上有家代理生產自行車工廠就叫 SimpleBikeFactory,只要給它單車標籤,他就會按要求生產膜拜單車或小黃車。接口
若是那天要生產小綠車, SimpleBikeFactory 只要調整他中的邏輯,就能夠知足須要了。string
namespace hbb0b0.DesignPattern { /// <summary> /// 自行車接口 /// </summary> public interface IBike { } /// <summary> /// 膜拜單車 /// </summary> public class MoBike : IBike { public MoBike() { Console.WriteLine("MoBike"); } } /// <summary> /// 小黃車 /// </summary> public class OfOBike : IBike { public OfOBike() { Console.WriteLine("OfOBike"); } } /// <summary> /// 簡單單車生產工廠 /// </summary> public class SimpleBikeFactory { public static IBike GetBike(string bikeName) { switch (bikeName) { case "MO": return new MoBike(); case "OFO": return new OfOBike(); default: return new MoBike(); } } } }
namespace hbb0b0.DesignPattern.SimpleFactory { /// <summary> /// SimpleFactoryApp /// </summary> public class SimpleFactoryApp : IMain { public void Test() { //建立膜拜單車 IBike moBike = SimpleBikeFactory.GetBike("MO"); //建立小黃車 IBike ofoBike = SimpleBikeFactory.GetBike("OFO"); } } }
原本生產單車的代碼產品
小黃車 OfOBike ofoBike =new OfOBike();
膜拜單車 MoBike moBike = new MoBike();
如今把生產單車對具體單車的依賴移到了靜態工廠方法,封裝了建立單車的變化,避免了建立單車代碼分散到各個地方,便於單車建立邏輯的維護與修改。
Encoding 中的 GetEncoding方法就是簡單工廠,它就是根據傳入標識來肯定生成那種Encoding。
工廠方法模式:
爲建立對象定義一個接口,讓子類來決定哪個類須要進行實例化,工廠模式容許一個類把實例化過程委託給子類。
類圖
代碼以下:
namespace hbb0b0.DesignPattern.FactoryMethod { /// <summary> /// 單車接口 /// </summary> public interface IBike { } /// <summary> /// 膜拜單車 /// </summary> public class MoBike:IBike { } /// <summary> /// 小黃車 /// </summary> public class OfOBike:IBike { } /// <summary> /// 單車工廠接口 /// </summary> public interface IBikeFactory { /// <summary> /// 獲取單車 /// </summary> /// <returns></returns> IBike GetBike(); } /// <summary> /// 膜拜單車工廠 /// </summary> public class MoBikeFactory : IBikeFactory { public IBike GetBike() { return new MoBike(); } } /// <summary> /// 小黃車工廠 /// </summary> public class OfOBikeFactory : IBikeFactory { public IBike GetBike() { return new OfOBike(); } } }
使用
namespace hbb0b0.DesignPattern.AbstractFactory { public class AbstractFactoryApp : IMain { public void Test() { //生產膜拜系列產品:單車與電動車 IBikeFactory moFactory = new MoBikeFactory(); IBike moBike= moFactory.GetBike(); IElectricBike moElectric = moFactory.GetElectricBike(); //生產小黃車系列產品:單車與電動車 IBikeFactory ofoFactory = new OfOBikeFactory(); IBike ofoBike = ofoFactory.GetBike(); IElectricBike ofoElectric = ofoFactory.GetElectricBike(); } } }
.net 使用工廠模式
抽象工廠:
定義爲建立相關或具備依賴關係的對象族提供一個接口,而無需分別爲這些對象指定具體的類。
抽象工廠容許客戶使用抽象的接口來建立一組相關產品,而不須要知道或關心實際生產出的具體產品是什麼。
代碼
namespace hbb0b0.DesignPattern.AbstractFactory { /// <summary> /// 電動車接口 /// </summary> public interface IElectricBike { } /// <summary> /// 抽象工廠 /// (提供多種產品) /// </summary> public interface IBikeFactory { /// <summary> /// 獲取自行車接口 /// </summary> /// <returns></returns> IBike GetBike(); /// <summary> /// 獲取電動車接口 /// </summary> /// <returns></returns> IElectricBike GetElectricBike(); } } /// <summary> /// 膜拜自行車工廠 /// </summary> public class MoBikeFactory : IBikeFactory { public IBike GetBike() { return new MoBike(); } public IElectricBike GetElectricBike() { return new MoElectricBike(); } } } //小黃車自行車工廠 public class OfOBikeFactory : IBikeFactory { public IBike GetBike() { return new OfOBike(); } public IElectricBike GetElectricBike() { return new OfOElectricBike(); } } }
使用
namespace hbb0b0.DesignPattern.AbstractFactory { public class AbstractFactoryApp : IMain { public void Test() { //生產膜拜系列產品:單車與電動車 IBikeFactory moFactory = new MoBikeFactory(); IBike moBike= moFactory.GetBike(); IElectricBike moElectric = moFactory.GetElectricBike(); //生產小黃車系列產品:單車與電動車 IBikeFactory ofoFactory = new OfOBikeFactory(); IBike ofoBike = ofoFactory.GetBike(); IElectricBike ofoElectric = ofoFactory.GetElectricBike(); } } }
三者區別:
簡單工廠模式:是把產品建立統移到統一的工廠方法中去,從而解耦了產品的建立依賴具體的產品。
工廠模式:爲建立對象定義一個接口,而由子類決定產品的建立。對象的建立是在子類中完成。
抽象工廠模式:爲某一系列或具備依賴關係的產品建立定義接口,而不須要分別爲各個產品的建立指定具體的類。工廠模式只提供單一產品,抽象工廠是對工廠模式的升級,抽象工廠是在工廠模式的基礎上提供一系列或具備依賴關係的商品。