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

产品接口: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系列时,我们创建一个工厂就行了,起码比工厂方法模式减少了一倍。

 

 

 

posted on 2018-12-20 19:00  SimpleWorker  阅读(194)  评论(1编辑  收藏  举报

导航