一、引言
上篇博客中,我们有讲到简单工厂模式,它解决了客户端和对象之间直接依赖的问题,但只要新增加产品就需要修改工厂类,这样使得简单工厂类的逻辑会变得越来越复杂。那如何解决这个问题呢?下面来看看今天我们学习的工厂方法模式,是如何解决这个问题的。
二、工厂方法模式
定义:工厂方法模式将对象的创建放在具体的工厂中去做,不再将所有的逻辑集中在工厂里,而只是提供具体工厂必需实现的接口,这样新增加产品时就不需要修改工厂类,可以通过新增加具体工厂类的方式解决简单工厂的问题。下面通过一个例子,帮助我们理解工厂方法模式
下面是代码demo:
namespace DNA.Framework.FactoryMethod {
//车子抽象类 public abstract class BaseCar { public abstract void Run(); } }
,
,
namespace DNA.Framework.FactoryMethod {
//接口工厂类(这里其实用抽象类较好) interface IBaseFactory { BaseCar GetCar(); } }
namespace DNA.Framework.FactoryMethod {
//宝马工厂类 class BMWFactory:IBaseFactory { public BaseCar GetCar() { return new BMW(); } } }
namespace DNA.Framework.FactoryMethod {
//奔驰工厂类 class MBZFactory : IBaseFactory { public BaseCar GetCar() { return new MBZ(); } } }
Main(= == == =
当我们需要新增一个产品的时候,比如我想开法拉利去上班,只需要新增具体的工厂类,产品类,不用去修改抽象工厂和具体工厂类中的代码,通过多态性完成了系统的扩展。比如某天我想开着法拉利去上班,只需要新增法拉利工厂和法拉利类就可以实现,代码如下:
namespace DNA.Framework.FactoryMethod {
//法拉利工厂类 class FERRARIFactory : IBaseFactory { public BaseCar GetCar() { return new FERRARI(); } } }
,
优点:比起简单工厂
工厂方法模式把对象创建延迟到具体的工厂类中,相对简单工厂的不足做了优化,对扩展开放,对修改封闭,很好的符合了开闭原则。
补充:并不是工厂方法模式比简单工厂模式好,要看具体应用什么到什么样的业务场景。
本文关于设计模式之工厂方法模式的学习就到这里了,希望能够帮到你,若有不足,欢迎斧正,感谢您的阅读。
参考:http://www.cnblogs.com/zhili/p/SimpleFactory.html
http://www.cnblogs.com/jdzhang/p/6928610.html