工作中简单工厂模式用法及其使用场景?

简介: 工作中简单工厂模式用法及其使用场景?

前言

聊到简单工厂模式,我印象非常深,之前入职的时候,刚启动公司的代码随便点开了其中一个类,就看到了简单工厂模式的应该。

场景描述

大家买过保险应该知道保单,刚开始投保的时候业务员会录入标的保险期限等保险资料,录完之后会交由上级审核,审核通过后才会正式生效;当保单数据需要调整时,需要进行批改,修改完资料后提交上级机构审核,审核完成后才会生成批单。除了这两个还有暂保单、预约单等;那审核通过后,针对不同类型的单子需要不同的业务处理逻辑,所以有了PProcessor投保类型的后置处理器、EProcessor批改类型的后置处理器、TProcessor暂保类型的后置处理器。他们的处理流程相识,根据模板规范,所以都继承处理器类Processor对其进行具体业务实现。由于这三者继承了Processor,基于多态的特性,我们可以建立一个简单工厂类,并编写生成实例的方法,将这三者交由工厂管理起来,根据方法参数名称来取对应的实例。

68130110d6c90aff96014b1e833f96d.png

测试用例

定义接口类

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();
    }
}

a3b4794c09e52163a0955aebe6f183f6_f36bf9292a694ee9b12d411adf277a22.png

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

目录
相关文章
|
算法 网络协议 Linux
【Cisco Packet Tracer】交换机的自学习算法
【Cisco Packet Tracer】交换机的自学习算法
570 0
|
编译器 C语言 C++
【C语言】realloc()函数详解(动态内存开辟函数)
【C语言】realloc()函数详解(动态内存开辟函数)
367 0
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能能源管理与节能减排
【8月更文挑战第5天】 使用Python实现深度学习模型:智能能源管理与节能减排
508 3
|
消息中间件 Java Kafka
实时计算 Flink版操作报错合集之RocksDB在尝试打开更多文件时达到了操作系统允许的最大打开文件数限制,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
307 0
|
API 数据库 索引
indexedDB 操作库IDBWRAPPER 教程翻译及API翻译第二部分part2
indexedDB 操作库IDBWRAPPER 教程翻译及API翻译第二部分part2
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
1427 3
|
设计模式
【设计模式】单例模式的三种实现方式
【设计模式】单例模式的三种实现方式
241 1
vue3【实战】语义化首页布局
vue3【实战】语义化首页布局
142 2
|
存储 Serverless
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
【数据结构】万字一文手把手解读哈希————(开/闭散列)解决哈希冲突完整详解(6)
|
数据处理 容器
RT-Thread快速入门-线程间同步之信号量
RT-Thread快速入门-线程间同步之信号量
523 0