设计模式-创建者模式-工厂模式

150 阅读4分钟

工厂模式

 运用工厂模式最大的作用就是为了解耦,将对象的创建者和使用者进行分离,这样便于扩展和维护。万物为了解耦
 工厂模式有三个模式,1.简单工厂模式, 2.工厂方法模式,3.抽象工厂模式。其实简单工厂模式严格说来并不是一种模式,而是一种习惯。

简单工厂模式

结构

简单工厂模式具有三个结构分别为

  1. 抽象产品:定义了产品的规范,描述了产品的主要特性以及其功能
  2. 具体产品:实现或者是继承了抽象产品的子类,来实现具体产品的细节
  3. 具体工厂:提供了创建具体产品的方法,调用者可以通过该工厂获取到具体的产品

image.png

优点该模式解除了Order与Product实现类的耦合,当修改产品,增加产品时只需要修改工厂类,而不需要需要Order类,可以让用户无缝衔接。
缺点增加新产品时还是需要修改工厂类的代码,会违背开闭原则(对修改关闭,对增加开放)

工厂方法模式

 该模式出现的目的是为了解决上述缺点,完全的遵循开闭原则开闭原则任何程序的基本。
工厂方法考虑的是一类产品的生产,只生产同一产品等级

结构

  1. 抽象工厂提供了创建产品的接口,调用者通过它来访问具体的工厂的工厂方法来创建具体的产品,也是定义了工厂的规范。
  2. 具体工厂实现了抽象工厂中方法,完成具体产品的创建
  3. 抽象产品定义了产品的规范,描述了产品的主要特性以及其功能
  4. 具体产品:实现或者是继承了抽象产品的子类,来实现具体产品的细节,它与具体工厂是一一对应

image.png

 工厂模式在系统增加新产品时只需要增加具体的产品类以及其对应的具体的工厂类即可,无需对原工厂进行任何的修改,满足开闭原则极大的进行了解耦

 但是它的缺点恰恰就是每增加一个产品就要增加一个具体的产品类和一个对应的具体工厂类,这增加了系统的复杂度。容易造成类爆炸的局面

抽象工厂模式

 抽象工厂模式就是为了解决上述工厂模式中产生的类爆炸的问题,抽象工厂模式中考虑的是同一产品族的生产。
 同一产品族就是例如:某一品牌生产出的一系列的电子产品,有电脑,手机,音箱,,这些产品都是由同一家工厂生产出来的,

结构

  1. 抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法,可以创建多个不同等级的产品
  2. 具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建
  3. 抽象产品定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
  4. 具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间是多对一的关系。

image.png 优点当一个产品族的多个对象被设计到在一起工作时,可以保证客户始终使用同一个产品族中的对象,如果要加一个产品族的话,只需要增加对应的产品类,以及增加一个工厂即可。这样也可以减少工厂类的创建,防止发生类爆炸的情况。
但是缺点也很明显,就是当要增加一个新的产品时,所有的工厂类都要修改,比如我要在图示中的产品,新增一个pizza类,此时我需要在抽象工厂类,添加createPizza这个接口,同时我要在每个具体工厂类来实现createPizza这个接口.