设计模式-工厂模式简单理解

Posted onetwothree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-工厂模式简单理解相关的知识,希望对你有一定的参考价值。

产品接口:Product  产品实现类:ProductA,ProductB

当你需要根据条件A和B来分别创建产品时,就可以把if else放到一个类SimpleFacotory中的createProduct方法中,如下

SimpleFactory{

  public Product create(Type){

    if(A) return new ProductA();

    if(B) return new ProductB(); 

  }

}

Client:

  Product  A= new SimpleFactory().create(A); //当用户需要创建A类型的产品时,调用工厂的create方法

这就叫简单工厂:一个工厂对象,一个create方法实现所有Product的创建。

这时候需求变了,用户要求创建A B C D E F Porduct,可能还要增加....X Y Z Product,原来的类经过测试了不要再修改。不让SimpleFactory修改?不干了,你们自己创建自己的产品,SimpleFactory罢工了!

那只能自己创建自己的产品了,

class FactoryA implement Factory{

  public Product create(){

    return new ProductA();

  }

}

class FactoryB implement Factory{

  public Product create(){

    return new ProductB();

  }

}

class FactoryC implement Factory

...

Client:

  Factory f = new FactoryA();  //当用户需要创建A类型的产品时,先创建A工厂

  f.create();

 

这时候需求又变了 ,生产Product的同时还要生产它的附加产品Additional,而且Additional的实现类还会和Product一起不断扩展,怎么办?每个Additional再创建一个工厂吗?这样类会不会太多了。

分类吧,我们知道ProductA和AdditionalA可以放在一起,ProductB和AdditionalB可以放在一起.....,于是:

class FactoryA implement Factory{

  public Product createProduct(){

    return new ProductA();

  }

  public Product createAdditional(){

    return new AdditionalA();

  }

}

class FactoryB implement Factory{

  public Product createProduct(){

    return new ProductB();

  }

  public Product createAdditional(){

    return new AdditionalB();

  }

} 

...

Client:

  Factory f = new FactoryA();  //当用户需要创建A系列的产品时,先创建A工厂

  f.createProduct();

  f.createAdditional();

这样,当增加新的Product和Additionall系列时,我们创建一个工厂就行了,起码比工厂方法模式减少了一倍。

 

 

 

以上是关于设计模式-工厂模式简单理解的主要内容,如果未能解决你的问题,请参考以下文章

深入理解设计模式-简单工厂模式(静态工厂方法模式)

设计模式学习——简单工厂模式工厂模式抽象工厂模式

简单工厂模式工厂方法模式抽象工厂模式 用图理解

深入理解设计模式-策略模式(结合简单工厂反射Spring详细讲解)

深入理解设计模式-策略模式(结合简单工厂反射Spring详细讲解)

设计模式重新理解简单工厂模式工厂模式抽象工厂模式