认识工厂模式(一)
本来是不想写模式这样的文章的,一来是自己对其理解并不没有什么独道之处,二来是因为网上关于类似的文章非常的全面.最终我还是决定写下来,由浅入深,由简至繁让各位路过的从粗浅的理论与实际的应用中了解设计大师们为什么要使用这种模式.
坦白的说自己之前并没有看过关于设计模式之类的书,对于工厂这种设计模式可能是本人最早接触过的一种设计模式.跟高手们聊天的时候,对方经常讲的不亦乐乎,而我则听的云里雾里的满脑袋问号.接触这种设计模式的时候始终没有真正体会到其好处,总觉的是自己为自己找麻烦.一位朋友问我,你们做的项目考虑扩展性方面的问题了吗?我有点发懵,我们的项目并没有要求什么扩展性,只要能够非常好的实现功能就好.后来在网上查询了许多这方面的资料,终于让自己有了更进一步的了解.
工厂设计模式随处可见,但是应用工厂设计模式并不能使程序性能提高,相反可能还会在编码上增加工作量.在我来看工厂就是用来创建对象实例的,跟使用关键字NEW创建出来的对象差不多.工厂会让使用者根本不需要了解具体类是怎么实现的,你只需要去使用专门为使用者所提供的接口来调用相关的方法来实现功能就可以了.这种封装对程序是有好处的,程序的具体实现类暴露的越少,错误的修改机会就越少.这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,范错误可能性就越少.
上面提到工厂模式的简单实现就是用来创建类的,这里又可以叫做静态工厂.因为工厂所使用的方法是使用静态方法来进行调用的. 一般根据传入的参数的不同来创建相应的实例.这里有几个概念需要说明一下.
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑,可以预测随着系统不段的深入的开发其中的逻辑会变的越来越复杂.如果一旦出现问题不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
代码写出来之后一眼便知道优缺点,但是还有另外一种解决方法叫做工厂方法。
简便点我就不写代码了。现在创建具体的产品是由具体的类来创建的,我们可以把这个工厂类做成一个抽象类,写一个创建产品的方法返回的类型是一个抽象产品类。然后按照产品种类来创建产品工厂,产品工厂需要实现抽象工厂并且使用抽象方法来创建具体的产品。在调用的时候可以按照我们的需要创建相应工厂,使用工厂创建相应的产品,调用产品的方法。
首篇似乎有些罗嗦,不过后篇会增加一些实际应用的例子.
.
浙公网安备 33010602011771号