type
status
date
slug
summary
tags
category
icon
password
AI summary

一、定义

notion image
⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建对象的⽅法, 允许⼦类 决定实例化对象的类型。
这种设计模式也是 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
总结: 避免创建者与具体的产品逻辑耦合 、 满⾜单⼀职责,每⼀个业务逻辑实现都在所属⾃⼰的类中完成 、 满⾜开闭原则⽆需更改使⽤调⽤⽅就可以在程序中引⼊新的产品类型 。但这样也会带来⼀些问题,⽐如有⾮常多的奖品类型,那么实现的⼦类会极速扩张。因此也需要使⽤其他的模式进⾏优化,这些在后续的设计模式中会逐步涉及到
JAVA【设计模式】依赖倒置原则JAVA【设计模式】建造者模式