简单工厂模式
一.什么是简单工厂?
传统理解:简单工厂属于创建型模式,有叫做静态工厂方法模式,但不属于23中GOF设计模式之一。简单工厂是由一个工厂对象决定创建出那一种产品类的实例。简单工厂模式是工厂模式家族中最简单的模式,可以理解为是不同工厂模式的一个特殊实现。
个人理解:简单工厂并非设计模式而是编程习惯,最起码它不属于GOF23种设计模式之一,但是经常可以看到使用简单工厂的项目,因为它的思想很简单。简单工厂,可以从字面理解是工厂,既然是工厂就是用来生产产品的,在编程里那么他就是用来创建对象的实例的。那么在工厂类中尽可能不要出现业务逻辑,不然会污染工厂。要做到单一职责,工厂就是用来生产对象的实例的。作用其实和new作用一样。
二.分析:
用皮具厂的例子把!
首先老板接到一订单,客户要求皮具厂生产皮包(钱包,旅行包,背包,电脑包)于是乎,老板就创办一个工厂(皮包抽象产品)。皮包工厂创建多个车间(皮包的具体产品)用来生产具体的产品,如钱包,旅行包。接下来我们就用编程来实现吧。
二.Demo:
1.普通实现工厂模式:
枚举:
/// <summary> /// 包包类型 /// </summary> public enum PageEnum { /// <summary> /// 钱包 /// </summary> Wallet = 0, /// <summary> /// 旅行包 /// </summary> TravellingBag = 1 }
其他的都可以参考泛型方式实现简单工厂模式的案例,下面就写个工厂的例子
/// <summary> /// 创建对象实例 /// </summary> /// <param name="obj"></param> /// <returns></returns> public IPage CreateInstance(PageEnum type) { IPage p = null; switch (type) { case PageEnum.Wallet: p = new Wallet(); break; case PageEnum.TravellingBag: p = new TravellingBag(); break; default: break; } return p; }
2.通过泛型类实现简单工厂模式:
接口:
/// <summary> /// 产品抽象类(包包) /// </summary> public interface IPage { /// <summary> /// 制作 /// </summary> void Make(); }
产品1:
/// <summary> /// 钱包 /// </summary> public class Wallet:IPage { /// <summary> /// 实现接口中的制作函数 /// </summary> public void Make() { Console.WriteLine("生产钱包"); } }
产品2:
/// <summary> /// 旅行包 /// </summary> class TravellingBag:IPage { /// <summary> /// 实现接口中的制作函数 /// </summary> public void Make() { Console.WriteLine("生产旅行包"); } }
工厂:
这里使用了new约束,参考官网文档:
https://msdn.microsoft.com/zh-CN/library/sd2w2ew5.aspx
/// <summary> /// 包包工厂 /// </summary> public class PageFactory<T> where T : new() { /// <summary> /// 创建对象实例 /// </summary> /// <param name="obj"></param> /// <returns></returns> public T CreateInstance() { return new T(); } }
调用:
class Program { static void Main(string[] args) { //接了一单生意,生产一批皮包,首先创建一个工厂 var factory = new PageFactory<Wallet>(); var page = factory.CreateInstance(); page.Make(); Console.Read(); } }
结果:
三注意: