一、引言

上篇博客中,我们有讲到简单工厂模式,它解决了客户端和对象之间直接依赖的问题,但只要新增加产品就需要修改工厂类,这样使得简单工厂类的逻辑会变得越来越复杂。那如何解决这个问题呢?下面来看看今天我们学习的工厂方法模式,是如何解决这个问题的。

二、工厂方法模式

定义:工厂方法模式将对象的创建放在具体的工厂中去做,不再将所有的逻辑集中在工厂里,而只是提供具体工厂必需实现的接口,这样新增加产品时就不需要修改工厂类,可以通过新增加具体工厂类的方式解决简单工厂的问题。下面通过一个例子,帮助我们理解工厂方法模式

下面是代码demo:

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

namespace DNA.Framework.FactoryMethod
{
  //车子抽象类    
public abstract class BaseCar    {        public abstract void Run();    } }

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

  ,

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

  ,

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

namespace DNA.Framework.FactoryMethod
{
  //接口工厂类(这里其实用抽象类较好)    
interface IBaseFactory    {        BaseCar GetCar();    } }

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

namespace DNA.Framework.FactoryMethod
{
  //宝马工厂类    
class BMWFactory:IBaseFactory    {        public BaseCar GetCar()        {            return new BMW();        }    } }

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

namespace DNA.Framework.FactoryMethod
{
  //奔驰工厂类    
class MBZFactory : IBaseFactory    {        public  BaseCar GetCar()        {            return new MBZ();        }    } }

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

  Main(= == == =

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

当我们需要新增一个产品的时候,比如我想开法拉利去上班,只需要新增具体的工厂类,产品类,不用去修改抽象工厂和具体工厂类中的代码,通过多态性完成了系统的扩展。比如某天我想开着法拉利去上班,只需要新增法拉利工厂和法拉利类就可以实现,代码如下:

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

namespace DNA.Framework.FactoryMethod
{
  //法拉利工厂类    
class FERRARIFactory : IBaseFactory    {        public  BaseCar GetCar()        {            return new FERRARI();        }    } }

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

  ,

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

 

优点:比起简单工厂

工厂方法模式把对象创建延迟到具体的工厂类中,相对简单工厂的不足做了优化,对扩展开放,对修改封闭,很好的符合了开闭原则。

补充:并不是工厂方法模式比简单工厂模式好,要看具体应用什么到什么样的业务场景。

 

本文关于设计模式之工厂方法模式的学习就到这里了,希望能够帮到你,若有不足,欢迎斧正,感谢您的阅读。

参考:http://www.cnblogs.com/zhili/p/SimpleFactory.html

http://www.cnblogs.com/jdzhang/p/6928610.html