软件设计模式之简单工厂模式
简单工厂模式的概念:
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂模式优缺点:
简单工厂的优点我百度了很多,众说纷纭;就连简单工厂的实现都有很多不同的;
如:
1、计算器做例子,工厂里面根据传入的参数来进行加减乘除的,但是我直接一个类里写加减乘除打上文档注释,不是更方便?我类打个点不就出来了?描述还可以要多详细可以多详细;
2、是一个接口,有很多实现类,然后工厂类统一对实现类管理,这个我觉得作用就是解耦;原本是客户端<-->实现类,变成了客户端<-->工厂类<-->实现类;这个我还是有点点懵;
3、是说卖鼠标的,全局配置去控制,第一天卖鼠标a,然后第二天鼠标a卖完了,要卖鼠标b,就不需要改代码,只需要改配置,所有的使用到的类就全改成了鼠标b了;这个例子的好处我能理解,就是可以全局把控,让所有用到我工厂类的人跟着我工厂类走;
实现:
第一个例子不做实现了,没大理解,第二个例子有点懵懵的,但似懂非懂;就实现下二,三;
第二个例子实现:
首先接口:
public interface Mouse { string GetMouseName(); }
然后实现类:
public class MouseDEY:Mouse { public string GetMouseName() { return "达尔优"; } } public class MouseSFY:Mouse { public string GetMouseName() { return "双飞燕"; } }
然后弄个枚举(我在这的想法是想让它类似于路由的作用,以后实现类多了只需要看这个枚举就知道自己需要哪个;不知道是不是多此一举,反正我觉得传参数传枚举也好看点,以后看到不足了再改了):
public enum MouseType { 达尔优, 双飞燕 }
然后是简单工厂类:
public class MouseFactory { private static Mouse mouse = null; public static Mouse createMouse(MouseType type) { switch (type) { case MouseType.双飞燕: mouse = new MouseSFY(); break; case MouseType.达尔优: mouse = new MouseDEY(); break; } return mouse; } }
第三个例子实现:
第三个例子跟第二个其实差别不大,唯一的区别就是一个参数时调用工厂方法时传进来的;一个参数时写在全局配置里的;
简单工厂类:
public class MouseFactory { private static Mouse mouse = null; private static string type =System.Configuration.ConfigurationManager.AppSettings["Fication"].ToString(); public static Mouse createMouse() { switch (type) { case "双飞燕": mouse = new MouseSFY(); break; case "达尔优": mouse = new MouseDEY(); break; } return mouse; } }
全局配置:
<appSettings> <add key="Fication" value="达尔优"/> </appSettings>
希望看到的大佬能指点下,感激不尽;