type
status
date
slug
summary
tags
category
icon
password
AI summary
一、定义
⼯⼚模式⼜称
⼯⼚⽅法模式
,是⼀种创建型设计模式
,其在⽗类中提供⼀个创建对象的⽅法, 允许⼦类 决定实例化对象的类型。这种设计模式也是 Java 开发中最常⻅的⼀种模式,它的主要意图是
定义⼀个创建对象的接⼝
,让其⼦ 类⾃⼰决定实例化
哪⼀个⼯⼚类,⼯⼚模式使其创建过程延迟到⼦类进⾏。简单说就是为了提供代码结构的扩展性,
屏蔽每⼀个功能类中的具体实现逻辑
。让外部可以更加简单的只是知道调⽤即可,同时,这也是去掉众多 ifelse 的⽅式。当然这可能也有⼀些缺点,⽐如需要实现的类⾮常多
,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使⽤中,逐步降低。二、示例:
模拟场景: 1、例如:一般找对象的方式,是通过自己去认识到新的姑娘,类似于姑娘这个对象
需要自己new出来
。假设有一个红娘牵线平台,你只需要说出你的需求,想要什么样的姑娘,平台就会给你连线
出怎么的姑娘。。。 2、例如:商店定义成工厂,我需要在商店里面兑换奖品,奖品的类型包括爱奇艺兑换卡、实物商品、优惠券等等,假设我想要兑换实物商品,我只要在商店里面获取实物商品对象即可,不需要关心实物商品类是怎么创建的。。。爱奇艺卡券类:
IQiYiCard
获取爱奇艺卡券类:
IQiYiCardService
优惠券类:
CouponInfo
获取优惠券服务:
CouponService
优惠券返回结果类:
CouponResult
商品信息:
GoodsInfo
获取实物商品服务:
GoodsService
实物商品服务返回结果:
DeliverReq
传统硬编码方式(都在一个类里面实现,多重if else嵌套使用)
发奖请求对象:
AwardReq
发奖结果反馈对象:
AwardRes
模拟发奖服务:
PrizeController
,多重语句if else判断,代码功能实现了,但是不好后续的维护和扩展测试:
ApiTest
工厂方法模式设计
定义一个奖品的接口:
ICommodity
,所有的奖品都实现此接口爱奇艺卡片:
CardCommodityService
优惠卷:
CouponCommodityService
商品实体:
GoodsCommodityService
商店,工厂:
StoreFactory
测试:
ApiTest
总结: 避免创建者与具体的产品
逻辑耦合
、 满⾜单⼀职责
,每⼀个业务逻辑实现都在所属⾃⼰的类中完成 、 满⾜开闭原则
,⽆需更改使⽤调⽤⽅就可以在程序中引⼊新的产品类型
。但这样也会带来⼀些问题,⽐如有⾮常多的奖品类型,那么实现的⼦类会极速扩张。因此也需要使⽤其他的模式进⾏优化,这些在后续的设计模式中会逐步涉及到- 作者:IT小舟
- 链接:https://codegym.top/article/JAVA%E3%80%90%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%91%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。