一、前言 同樣在上班的路上,一個程序員想著是買梅干菜肉包還是買酸辣粉絲包,到了包子點 卻發(fā)現(xiàn)只有饅頭餡子的包子了,卻買了一包豆?jié){;一個程序員可能在在家吃完飯開車 去上班了,這尼瑪是富二代;一個程序員可能想著如何把自己的代碼如何優(yōu)化,如何 提高性能,如何的如何……上班路上的程序員讓你輕松了解三個設(shè)計模式。 二、簡單工廠模式 簡單工廠模式(Simple Factory Pattern):又稱為靜態(tài)工廠方法(Static Factory Met hod)模式,它屬于類創(chuàng)建型模式。在簡單工廠模式中,可以根據(jù)參數(shù)的不同返回不同 類的實例。簡單工廠模式專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實例,被創(chuàng)建的實例通 常都具有共同的父類。簡單工廠模式就好比一個是一個富二代程序員,你要什么,簡 單工廠就給你什么。簡單工廠模式包括三個角色:抽象產(chǎn)品角色,具體產(chǎn)品角色,工 廠角色代碼實現(xiàn)如下: C#代碼 - //抽象產(chǎn)品角色:交通工具車
- public abstract class Car
- {
- public virtual void GoToWork()
- {
- }
- }
- //具體產(chǎn)品角色:自行車
- public class Bike : Car
- {
- public override void GoToWork()
- {
- Console.WriteLine("騎自行車去上班");
- }
- }
- //具體產(chǎn)品角色:公交車
- public class Bus : Car
- {
- public override void GoToWork()
- {
- Console.WriteLine("做公交車去上班");
- }
- }
- //工廠角色:簡單工廠類
- public class SimpleFactory
- {
- public static Car CreateSimple(string str)
- {
- Car simple = null;
- switch (str)
- {
- case "Bike":
- simple = new Bike();
- break;
- case "Bus":
- simple = new Bus();
- break;
- //……
- }
- return simple;
- }
- }
客戶端調(diào)用代碼: C#代碼 - //根據(jù)客戶端傳入的參數(shù)簡單工廠決定如何去上班
- Car car = SimpleFactory.CreateSimple("Bus");
- car.GoToWork();
三、工廠方法模式 工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構(gòu)造器(Virtual Constructor)模式或者多態(tài)工廠(Polymorphic Factory)模式,它屬于類創(chuàng)建型模式 。在工廠方法模式中,工廠父類負(fù)責(zé)定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負(fù) 責(zé)生成具體的產(chǎn)品對象,這樣做的目的是將產(chǎn)品類的實例化操作延遲到工廠子類中完 成,即通過工廠子類來確定究竟應(yīng)該實例化哪一個具體產(chǎn)品類。工廠方法模式包括四 個角色:抽象產(chǎn)品角色,具體產(chǎn)品角色,抽象工廠角色,具體工廠角色具體示例代碼 實現(xiàn)如下: C#代碼 - //抽象產(chǎn)品角色:交通工具車
- public abstract class Car
- {
- public virtual void GoToWork()
- {
- }
- }
- //具體產(chǎn)品角色:自行車
- public class Bike : Car
- {
- public override void GoToWork()
- {
- Console.WriteLine("騎自行車去上班");
- }
- }
- //具體產(chǎn)品角色:公交車
- public class Bus : Car
- {
- public override void GoToWork()
- {
- Console.WriteLine("做公交車去上班");
- }
- }
- //抽象工廠角色:工廠接口
- public interface IFactory
- {
- Car ByWhatWay();
- }
- //具體工廠類:自行車類
- public class BikeFactory : IFactory
- {
- public Car ByWhatWay()
- {
- return new Bike();
- }
- }
- //具體工廠類:公交車類
- public class BusFactory : IFactory
- {
- public Car ByWhatWay()
- {
- return new Bus();
- }
- }
客戶端調(diào)用代碼: C#代碼 - //根據(jù)客戶端實例化的工廠決定如何去上班
- IFactory factory = new BusFactory();
- //常規(guī)寫法
- //反射優(yōu)化 (BusFactory)Assembly.Load("當(dāng)前程序集名稱").CreateInstance("當(dāng)前命名空間名稱.要實例化的類名")
- //using System.Reflection; 引用命名空間
- //var factoryName = "BusFactory";
- //IFactory factory = (BusFactory) Assembly.Load("當(dāng)前程序集名稱").CreateInstance("當(dāng)前命名空間名稱." + factoryName);
- Car car = factory.ByWhatWay();
- car.GoToWork();
四、抽象工廠模式 抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關(guān)或相互依賴對 象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬于對象創(chuàng)建型 模式。抽象工廠模式包括四個角色:抽象產(chǎn)品角色,具體產(chǎn)品角色,抽象工廠角色, 具體工廠角色具體示例代碼如下: 客戶端調(diào)用: C#代碼 - AbstractFactory factory=new HighFactory();
- CoderLove coder=new CoderLove(factory);
- coder.GetCoderLove();
抽象工廠模式隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建。由于這種隔 離,更換一個具體工廠就變得相對容易。所有的具體工廠都實現(xiàn)了抽象工 廠中定 義的那些公共接口,因此只需改變具體工廠的實例,就可以在某種程度上改變 整 個軟件系統(tǒng)的行為。除了以上苦逼程序員,高逼格程序員,還可以具體添加一個開 車SUV吃著包子豆?jié){的具體工廠,也可以添加騎著自行車吃著三明治牛奶的具體工廠 。 五、總結(jié) 1、這個三個模式都屬于對象創(chuàng)建型模式 2、簡單工廠模式簡單的理解為客戶端告訴工廠他想要什么實例,工廠就給生產(chǎn)什么實 例 3、工廠方法模式可以理解客戶端有了創(chuàng)建實例的機(jī)器,他想要什么實例就自己生產(chǎn)什 么實例 4、抽象工廠模式最常見的情況是一套程序需要多套數(shù)據(jù)實現(xiàn)的情況下 示例代碼下載:https:///cY8cctUs7pXSb (提取碼:157b)
|