Java设计模式之工厂模式----简单工厂?抽象工厂?工厂方法?

一.我们说的设计模式指什么?


GoF(Gang of Four):是四个人的代号。

《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著,被认为是关于设计模式的经典和权威。

介绍:设计模式(豆瓣)


GoF的23种设计模式总结:

在这里插入图片描述

  • 简单工厂并不是一种标准的设计模式
  • 工厂方法模式和抽象工厂模式都是标准设计模式,而且属于创建型模式

二.简单工厂模式

1.定义:

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。


2.UML类图

在这里插入图片描述
解释:简单工厂模式一般都会有一个SimpleFactory类,这个类中有一个create方法,根据传入参数也就是类型的不同返回不同的实例。


3.优缺点:

优点

  1. 简单工厂包含必要的判断逻辑,简单工厂实现了对象的创建和使用的分离。
  2. 客户端无需知道所创建的具体产品类的类名,只需要具体产品类对应的参数即可!
  3. 在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性

缺点

  1. 工厂类的职责过重,从类图中可以看出简单工厂中包含加减乘除的逻辑判断语句,它一旦有问题,整个系统都要出问题
  2. 在添加新的类的时候,例如我添加了开根号运算,那么系统中的简单工厂类就要修改,违反了开放——封闭原则!这样及其不利于系统的扩展和维护!
  3. 简单工厂的静态方法,使得工厂角色无法形成基于继承的等级结构!

二.工厂方法模式

1.定义:

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。


2.UML类图

在这里插入图片描述
工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。创建的时候直接创建 Factory f = new AFactory();即可


3.优缺点:

优点

  1. 工厂方法用来创建客户所需要的产品,同时隐藏了哪种具体产品类将被实例化的细节,用户只需要要关注工厂,不需要关注创建的细节,只知道对应的工厂的名字就好!
  2. 在增加修改新的运算类的时候不用修改代码,只需要增加对应的工厂就好,完全符合开放——封闭性原则!
  3. 创建对象的细节完全封装在具体的工厂内部,而且有了抽象的工厂类,所有的具体工厂都继承了自己的父类!完美的体现了多态性

缺点

  1. 在增加新的产品(对应UML图的算法)时,也必须增加新的工厂类,会带来额外的开销
  2. 抽象层的加入使得理解程度加大

三.抽象工厂模式

1.定义:

抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线(产品族)很容易,但是无法增加新的产品。

2.UML类图

在这里插入图片描述


四.区别

  • 简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
  • 工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
  • 抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值