神刀安全网

程序员上班路上案例解说工厂模式

一、前言

同样在上班的路上,一个程序员想着是买梅干菜肉包还是买酸辣粉丝包,到了包子点却发现只有馒头馅子的包子了,却买了一包豆浆;

一个程序员可能在在家吃完饭开车去上班了,这尼玛是富二代;

一个程序员可能想着如何把自己的代码如何优化,如何提高性能,如何的如何……

上班路上的程序员让你轻松了解三个设计模式

二、简单工厂模式

简单工厂模式(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、抽象工厂模式最常见的情况是一套程序需要多套数据实现的情况下

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 程序员上班路上案例解说工厂模式

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮