直接开始说了,不浪费园友宝贵的时间!
什么是工厂模式?
在学习前,先问一下:“它是什么?”。
工厂模式,它是项目里面常用的设计模式之一。
它是属于创建型模式,简单的理解创建型模式就是将实例化工作交给另外一个对象来完成。
工厂模式(又称静态工厂模式 Static Factory Method),它算是软件设计模式中最简单的模式了。
为了解决什么问题?
工厂模式使代码清晰,降低耦合度,调用者通过 接口/抽象类来获得想要的实例化,而无需关心细节上是如何实现的。
工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。
(说的比较简单,看了多个网站与博客,我个人认为这句话是工厂模式要解决的最根本的问题,如果有兴趣,可以去看一下其它文章。)
什么时候使用?
工厂模式属于创建类模式,在同的条件下创建不同的对象实例时,可以使用工厂方法模式。
简单的对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。(就是复杂的时候才用工厂,简单不需要用,反而增加程序的复杂度。)
实践加深理解:
我请大家去饭店吃饭,有东北菜(我是东北yin),浙江菜,北京菜等等等等,我把你们带进饭店,然后点了东北菜。这个过程,其实就是工厂模式的一种实现。
首先,不管它是什么菜系的饭店,首先它必须是个“饭店”,必须会做菜(简单描述一下),以下是代码实践过程。
一、我们创建一个饭店的接口类,里面只有一个动作,用来规定所有饭店都必须会做菜!!!
/// <summary> /// 饭店接口类 /// </summary> public interface IRestaurants { /// <summary> /// 每个饭店必须会做饭 /// </summary> /// <returns></returns> string Cook(); }
二、接下来创建几个菜系的具体饭店。
/// <summary> /// 北京饭店 /// </summary> class Beijing : IRestaurants { public string Cook() { return "给你北京菜"; } }
/// <summary> /// 东北饭店 /// </summary> class Dongbei : IRestaurants { public string Cook() { return "给你东北菜"; } }
/// <summary> /// 浙江饭店 /// </summary> class Zhejiang : IRestaurants { public string Cook() { return "给你浙江菜"; } }
三、菜馆有了,接下来这个就是简单工厂模式里的重点了。如何让这些饭店能够正确的给我上菜呢?(如果读者说去东北饭店肯定不能给上北京菜,那请您出门右拐,跪哭!!!)
这时就需要有个“工厂”来协助我要告诉什么饭店做菜了(创建哪个饭店的实例)。
/// <summary> /// 饭店工厂类,根据名字创建饭店的实例。 /// </summary> public class RestaurantSimpleFactory { public IRestaurants GiveMe(string name) { switch (name) { case "Dongbei": return new Dongbei(); case "Beijing": return new Beijing(); case "Zhejiang": return new Zhejiang(); default: return new Dongbei(); } } }
四、准备工作完毕,可以上菜了。
public class Program { static void Main(string[] args) { //创建饭店工厂实例 var restaurantSimpleFactory = new RestaurantSimpleFactory(); //使用饭店接口招收实现它的饭店实例 IRestaurants restaurant = restaurantSimpleFactory.GiveMe("Dongbei"); string cookWhat = restaurant.Cook(); Console.WriteLine("饭店:" + cookWhat); Console.ReadLine(); } }
图解:这是根据我个人的理解画的导图,可能与网络上大牛们的不太一样。
Tag:简单工厂中还包含了另一种实现,“工厂方法”,接下来深入学习一下。
如果我的理解有误,想喷就喷没关系,别骂我就好!可能在您的愤怒中会学习到我没有理解的。谢谢观看!