设计模式---工厂模式

本文是在工作和学习中结合业务场景的设计模式实战,如有不正确的地方,欢迎大家批评指正。

一、什么是工厂模式?

    定义一个接口,多个接口实现类,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

二、工厂模式适合的业务场景

    在处理同一业务时要根据不同的条件去创建不同的业务处理类的实例。

三、我的工厂模式实战&代码

    工厂模式分为简单工厂、工厂方法、抽象工厂,我在解决业务需求时主要是用到了抽象工厂(简单工厂+反射)。

     先简单介绍下业务逻辑。我们项目中有一个在线统计学方法计算的功能,根据用户选择的计算方法和数据去进行不同的统计学方法计算,将结果处理封装返回给前端,最终展示在页面给客户。我们有多个统计学方法,这就涉及到每次该实例化哪个方法,如何让代码自己去选择,一开始就用了switch,JDK8在接口中允许创建静态方法,所以如下图,我的解决方案一开始是这样的:

这种方式也可以很好地满足业务需求,但是想到以后计算方法的增多,switch越来越臃肿,代码不美观不简洁,所以决定改造一番。

    首先,创建接口和多个接口实现类

    实现类太多了,简单给大家看一下,就不粘贴详细代码了

    然后创建一个工厂类,他主要的职责是根据用户选择的不同计算方法去实例化不同的类,

    这里主要是通过类名用Class.forName反射拿到class的实例,return该实例。然后调用,

这样改造的话,如果后续还要增加计算方法,只需要实现该接口去写实现类就好了,我这里之所以用方法名字反射拿到实例,是因为我们前端会展示方法列表,每个方法在数据库中都有配置,索性就把方法实现类名和库里配置统一了,这样在前端参数中可以直接拿到用户选择的方法名。

四、总结

    工厂模式是开发中常用到的一种设计模式,他可以很灵活的去处理我们的业务需求,并且后期拓展方法代价较小,代码清晰容易维护。当然,所有的架构设计技术选型都不能脱离业务,也不能过度设计。

PS:小问题,每次调用时我都需要new 我的工厂类,如果我把工厂类搞成一个单例怎么样呢?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值