设计模式之深入理解工厂方法模式

对于工厂模式大家都是耳熟能详的,但是发现大家对工厂模式的叫法比较混乱,我先明确一下概念。工厂模式分为“工厂方法模式”和“抽象工厂模式”,此两种模式是属于Gof23种经典设计模式的。平时大家所说的“工厂模式“其实就是指“工厂方法模式”,工厂方法模式还可以退化为“简单工厂模式”,“简单工厂模式”并不属于Gof23中经典设计模式。本文将介绍工厂方法模式。

一.定义

定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。

二.特点

具体产品和具体工厂一 一对应

三.优缺点

1:优点

  1. 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  2. 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则

2:缺点

  1. 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

四.注意点

复杂对象适合使用工厂方法模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂方法模式,如果使用工厂方法模式,就需要引入一个工厂类,会增加系统的复杂度。

五.使用场景

1:客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
2:创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
3:客户不关心创建产品的细节,只关心产品的品牌。

六.结构

1、该模式的主要角色如下:

  1. 抽象工厂:提供创建产品的接口,调用者通过它访问具体工厂的工厂方法创建产品
  2. 具体工厂:实现抽象工厂的方法,完成具体产品的创建
  3. 抽象产品:定义产品的规范,描述了产品的主要特征和功能
  4. 具体产品:实现抽象产品定义的功能

2、结构图如下:
在这里插入图片描述

七.实现

步骤1:创建抽象类:Car
在这里插入图片描述
步骤2:创建子类BMW、Audi
在这里插入图片描述
在这里插入图片描述
步骤3:创建抽象工厂:CarFactory(此处采用接口实现)
在这里插入图片描述
步骤4:创建具体工厂:奥迪工厂(AudiFactory)和宝马工厂(BMWFactory)
在这里插入图片描述
在这里插入图片描述
步骤5:客户端代码
1、张三想买奥迪,那么就通过奥迪工厂来生产车
2、李四想买白马,那么就通过宝马工厂来生产车
在这里插入图片描述
步骤6:客户端代码
运行代码,查看结果,奥迪工厂生产了一辆奥迪,宝马工厂生产了一辆宝马。
在这里插入图片描述

八.总结

1:工厂方法模式是满足开闭原则的。
2:如果创建的对象简单,则不必使用工厂模式。
3:产品和工厂是一 一对应的。
4:当需要生成的产品不多且不会增加,一个具体工厂类就可以完成任务时,可删除抽象工厂类。这时工厂方法模式将退化到简单工厂模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值