同樣在上班的路上,一個程序員想著是買梅干菜肉包還是買酸辣粉絲包,到了包子點卻發現只有饅頭餡子的包子了,卻買了一包豆漿;
一個程序員可能在在家吃完飯開車去上班了,這尼瑪是富二代;
一個程序員可能想著如何把自己的代碼如何優化,如何提高性能,如何的如何……
上班路上的程序員讓你輕松了解三個設計模式
簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式,它屬於類創建型模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
簡單工廠模式就好比一個是一個富二代程序員,你要什麼,簡單工廠就給你什麼。
簡單工廠模式包括三個角色:抽象產品角色,具體產品角色,工廠角色
代碼實現如下:
//抽象產品角色:交通工具車 public abstract class Car { public virtual void GoToWork() { } } //具體產品角色:自行車 public class Bike : Car { public override void GoToWork() { Console.WriteLine("騎自行車去上班"); } } //具體產品角色:公交車 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; } }
客戶端調用代碼:
//根據客戶端傳入的參數簡單工廠決定如何去上班 Car car = SimpleFactory.CreateSimple("Bus"); car.GoToWork();
工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多態工廠(Polymorphic Factory)模式,它屬於類創建型模式。在工廠方法模式中,工廠父類負責定義創建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。
工廠方法模式包括四個角色:抽象產品角色,具體產品角色,抽象工廠角色,具體工廠角色
具體示例代碼實現如下:
//抽象產品角色:交通工具車 public abstract class Car { public virtual void GoToWork() { } } //具體產品角色:自行車 public class Bike : Car { public override void GoToWork() { Console.WriteLine("騎自行車去上班"); } } //具體產品角色:公交車 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(); } }
客戶端調用代碼:
//根據客戶端實例化的工廠決定如何去上班 IFactory factory = new BusFactory(); Car car = factory.ByWhatWay(); car.GoToWork();
抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於對象創建型模式。
抽象工廠模式包括四個角色:抽象產品角色,具體產品角色,抽象工廠角色,具體工廠角色
具體示例代碼如下:
//抽象交通工具車 public abstract class Car { //名字 public string CarName{ get; set; } public virtual string GoToWork() { return CarName; } } //抽象早飯類 public abstract class BreakFast { //早飯名稱 public string FoodName { get; set; } public virtual string Eat() { return FoodName; } } //自行車 public class Bike : Car { public override string GoToWork() { CarName = "騎著自行車"; return CarName; } } //公交車 public class Suv: Car { public override string GoToWork() { CarName = "開著SUV汽車"; return CarName; } } //高逼格早飯:三明治牛奶 public class SandWichAndMilk : BreakFast { public override string Eat() { FoodName = "三明治和牛奶"; return FoodName; } } //苦逼早飯:包子豆漿 public class BaoziAndDoujiang : BreakFast { public override string Eat() { FoodName = "包子豆漿"; return FoodName; } } //抽象工廠類 public abstract class AbstractFactory { //創建交通工具方法 public abstract Car CreatCar(); //創建早飯方法 public abstract BreakFast CreateBreakFast(); } //具體工廠類 public class LowFactory : AbstractFactory { public override Car CreatCar() { return new Bike(); } public override BreakFast CreateBreakFast() { return new BaoziAndDoujiang(); } } //具體工廠類 public class HighFactory : AbstractFactory { public override Car CreatCar() { return new Suv(); } public override BreakFast CreateBreakFast() { return new SandWichAndMilk(); } } public class CoderLove { private Car car; private BreakFast breakFast; public CoderLove (AbstractFactory fac) { car=fac.CreatCar(); breakFast=fac.CreateBreakFast(); } public void GetCoderLove() { Console.WriteLine("早飯吃完"+breakFast.Eat()+","+car.GoToWork()+"去上班"); } }
客戶端調用:
AbstractFactory factory=new HighFactory(); CoderLove coder=new CoderLove(factory); coder.GetCoderLove();
1、這個三個模式都屬於對象創建型模式
2、簡單工廠模式簡單的理解為客戶端告訴工廠他想要什麼實例,工廠就給生產什麼實例
3、工廠方法模式可以理解客戶端有了創建實例的機器,他想要什麼實例就自己生產什麼實例
4、抽象工廠模式最常見的情況是一套程序需要多套數據實現的情況下