目录:
1:应用场景
2:传统工厂模式
3:传统工厂模式实现1中应用场景的弊端
4:IOC和工厂模式连合使用实现1中描述的场景
1:应用场景
在MYPM的工作流业务中,有三种业务对像可以走工作流,分别为:文档,项目和工作任务;这三种业务对像在走工作流时,具体处理业务是有差别的,工作流引擎要根据不同的业务对像(文档,项目和工作任务),调用不同的处理器.
2:传统工厂模式
(1)简单工厂模式
用法:客户端利用SimpleFactory产生一个具体产品(用AbstractProduct引用),当然这需要客户端传参,但判断逻辑位于SimpleFactory中(如switch语句)。
扩展:若需要增加具体产品E,则须添加ConcreteProductE类,同时修改SimpleFactory。
修改:若需要修改具体产品A,则只需修改ConcreteProductA类。
(2)工厂方法模式
用法:客户端根据需要的产品选择工厂(实例化具体工厂A,用AbstractFactory引用),再用该工厂制造产品(用AbstractProduct引用)。
扩展:若需要增加具体产品E,则须添加ConcreteProductE类和ConcreteFactoryE。
修改:直接修改相应产品。
(3)抽象方法模式
用法:客户端根据需要的产品选择工厂(实例化具体工厂A,用AbstractFactory引用),再用该工厂制造产品(用AbstractProduct引用)。相比而言,抽象工厂模式的好处是易于转换产品的系列(如由A系列转换为B系列)。
扩展:若需要增加产品3A和3B,则除了要增加3个类外还要修改FactoryA和FactoryB。若需要增加产品系列C,除了增加相应的类外,还要增加FactoryC类。
修改:直接修改相应的类。
3:传统工厂模式实现1中应用场景的弊端
应用场景
在MYPM的工作流业务中,有三种业务对像可以走工作流,分别为:文档,项目和工作任务;这三种业务对像在走工作流时,具体处理业务是有差别的,工作流引擎要根据不同的业务对像(文档,项目和工作任务),调用不同的处理器.
在1中所描述场景,用简单工厂模式实现代码中会有很多if else
或是switch语句;用工厂方法模式或抽象方法模式实现时,会增加类。且看下面IOC和工厂模式连合使用后三种工厂模式(简单工厂模式、工厂方法模式、
抽象方法模式)合并成简单工厂模式使用且代码中无任何if else 或是switch语句
4:IOC和工厂模式连合使用业实现1中描述的场景
思路其实很简单:
在工厂中持有一map(通过IOC注入),key 为简单工厂中要传入的参数,value为实现了处理器接口 WorkFlowTaskHandler的具体实现。取出具体的“产品”,即场景中的处理器
在工作流引擎中中调用方式如下
//getHanerByTask 方法中传入要处理的工作流任务类型
WorkFlowTaskHandler handler = taskHandlerFactory.getHanerByTask(dto.getTask().getTaskType());
//handleWfTask为处理器接口WorkFlowTaskHandler中定义的接口
handler.handleWfTask(dto);
下面请看具体实现
4.1 先看IOC配置,如下图所示taskHandlerFactory中持有workFlowHanderHold,workFlowHanderHold就是一个map
workFlowHanderHold中注入了 三个处理器,如有必要还可以继续注入实现了WorkFlowTaskHandler接口的任意类
4.2 工厂类,所下两图所示,TaskHandlerFactoryImpl的实现中,代码少之又少
分享到:
相关推荐
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...
主要为大家详细解析了Spring中IoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
工厂模式几种类型的测试,并有spring ioc 的简单实现!
Spring ioc Spring ioc
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
spring基础Spring IOC和Spring AOP的原理及使用
SpringIOC和AOP实现机制模拟,来自与网络。
详细讲解了springioc的各种注入方式以及对应的java方式。讲解了springioc和DI的区别,以及注入特殊复杂的属性
spring ioc思维导图,让自己快速、详尽地了解spring ioc知识。
Spring IoC加载流程讲解以及IoC思想和依赖倒置原则
这是个模拟spring ioc的学习例子,是个java工程。有助于对aop和ioc的理解
Spring IOC操作的步骤,详细的步骤讲解截图,祝早日脱离苦海!祝早日成功! (IOC的设计模式)
Spring Ioc 注解 依赖注入
SpringIOC经典Demo,绝对的经典.