概念

自己不生产对象了,让工厂来帮忙生产对象,自己只告诉工厂我要哪种对象。

举个例子:
有个水果工厂,我们通过传入水果的类型,来告诉工厂我们需要哪种水果。至于生产过程,交给水果工厂来处理。

水果工厂:
image.png

调用者:
image.png

优点

  • 降低耦合;
  • 大大减少代码重复,例如某个对象的构造方法很复杂,如果不用简单工厂模式,每次都要写一大堆重复的代码,而使用简单工厂模式可以减少代码的重复,例如,生产一个苹果需要其他对象:

image.png

缺点

  • 生产的产品种类如果过多,工厂类过于庞大,承担太多职责,变成了超级类。
  • 违背单一原则,苹果生产过程需要修改,要修改该工厂类,梨的生产过程要修改,也要修改这个工厂;
  • 当生产新的产品时,必须在工厂类中添加新的分支,因此违背了开闭原则。