You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

介绍

工厂模式的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
简单说就是为了提供代码结构的扩展性屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的调用即可。也是消除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<Integer,ICommidity>将3类实现放到map中key为奖品类型代码

优点

避免创建者与具体的逻辑耦合、满足单一职责,每一个业务逻辑实现都在自己的类中完成、满足开闭原则,无需更改使用调用方法就可以在程序中引入新的产品类型

缺点

如果有非常多的类型,那么实现的子类也会很多,因此需要使用其他模式进行优化