码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-12-20 20:23:11      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:类型   nbsp   设计模式   col   sim   product   需求   strong   add   

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

 

 

 

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

标签:类型   nbsp   设计模式   col   sim   product   需求   strong   add   

原文地址:https://www.cnblogs.com/onetwothree/p/10120869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!