## 介绍 工厂模式的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的调用即可。也是消除if-else方式之一。 ## 代码例子 场景:用户抽象后获得积分,使用积分可以兑换奖品。奖品分为3类:兑换卡、实物奖品、优惠卷 ### 1. 一坨代码 可以使用if-else实现,通过判断奖品类型,实现不同奖品兑换 ![[Snipaste_2023-02-10_21-23-21.png]] 缺点:后续人员接手会变得十分痛苦,并且重构成本高。 ### 2.用工厂模式改造 ![[Snipaste_2023-02-10_21-25-01.png]] 1. 定义奖品接口 ![[Snipaste_2023-02-10_21-26-16.png]] 2. 实现该接口 ![[Snipaste_2023-02-10_21-26-59.png]] 3. 构建奖品工厂类 ![[Snipaste_2023-02-10_21-27-35.png]] **可以用Map来代替工厂类,比如构建Map将3类实现放到map中,key为奖品类型代码** ## 优点 避免创建者与具体的逻辑耦合、满足单一职责,每一个业务逻辑实现都在自己的类中完成、满足开闭原则,无需更改使用调用方法就可以在程序中引入新的产品类型 ## 缺点 如果有非常多的类型,那么实现的子类也会很多,因此需要使用其他模式进行优化