前言
聊到简单工厂模式,我印象非常深,之前入职的时候,刚启动公司的代码随便点开了其中一个类,就看到了简单工厂模式的应该。
场景描述
大家买过保险应该知道保单,刚开始投保的时候业务员会录入标的保险期限等保险资料,录完之后会交由上级审核,审核通过后才会正式生效;当保单数据需要调整时,需要进行批改,修改完资料后提交上级机构审核,审核完成后才会生成批单。除了这两个还有暂保单、预约单等;那审核通过后,针对不同类型的单子需要不同的业务处理逻辑,所以有了PProcessor投保类型的后置处理器、EProcessor批改类型的后置处理器、TProcessor暂保类型的后置处理器。他们的处理流程相识,根据模板规范,所以都继承处理器类Processor对其进行具体业务实现。由于这三者继承了Processor,基于多态的特性,我们可以建立一个简单工厂类,并编写生成实例的方法,将这三者交由工厂管理起来,根据方法参数名称来取对应的实例。
测试用例
定义接口类
public interface Processor { public void handle(); }
定义统一的接口模板类,处理逻辑交由子类进行实现。
定义实现类
public class EProcessor implements Processor { public void handle() { System.out.println("批单后续逻辑处理"); } }
public class PProcessor implements Processor { public void handle() { System.out.println("预约单后续逻辑处理"); } }
public class TProcessor implements Processor { public void handle() { System.out.println("投保单后续逻辑处理"); } }
定义工厂类
public class ProcessorFactory { public static Processor getInstance(String name){ Processor processor=null; switch (name){ case "T" : processor=new TProcessor(); break; case "E": processor=new EProcessor(); break; case "P": processor=new PProcessor(); break; } return processor; } }
根据传入类型返回具体的业务实现类,由于不同类型的保险单前端会传递一个业务类型标志,刚好可以根据这个业务类型标志来取出对应的业务实现类进行处理。
测试
public class SimpleFactoryTest { public static void main(String[] args) { //前端传递的业务标识 String businessType="T"; Processor instance = ProcessorFactory.getInstance(businessType); instance.handle(); } }
Spring IOC场景
相信大家都用过Spring框架,Spring IOC在对Bean进行管理的时候也应用了简单工厂模式;
public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory { //.......... @Override public Object getBean(String name) throws BeansException { // 此方法是实际获取bean的方法,也是触发依赖注入的方法 return doGetBean(name, null, null, false); } //.......... }
总结
使用简单工厂设计模式,将我们的不同的业务实现类交由工厂进行管理,这样我们在后期比较好维护,降低耦合度;如果没有使用工厂模式,在很多业务上都去new的话,假设投保的业务实现类出现了2.0版本,那就需要在代码挨个查找修改,不符合开放-封闭原则,使用简单工厂模式可以直接修改工厂类中返回的实例值即可。
————————————————
版权声明:本文为CSDN博主「@猪大肠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45031612/article/details/129325916