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