用途: 用于简化代码复杂度,解除耦合,使代码简单化
优点: 让懂的人更有效率的去完成开发.
缺点: 缺点肯定就是不懂的人看不懂呀.
工厂+策略
场景用途
适用于根据不同的字段值去进行不同的业务逻辑,
如 红包类型(1:普通红包 2:拼手气红包 3:口令红包 4:语音红包 5:视频红包 等)
地址类型(1:省 2:市 3:区 4:县 5:镇 6:村 等)
凡是这种有字段值区分,每种要走不同的业务逻辑的,都可以用该设计模式
其目的是简化大量复杂if else 逻辑,使代码更清晰,更容易维护
当然,要是else分支业务逻辑比较简单,可以直接用if else,没有必要搭建该模式,后期需要再改造
标注与注释
其中 策略处理器 就是指的 策略接口的实现类
涉及基础
枚举,接口
涉及难点:
- 工厂类 实现InitializingBean接口,实现初始化方法,已保证在项目启动时完成工厂资源的加载
- 工厂类 用@Resource注入到集合中时,泛型为接口则将该接口实现类都注入到集合中
- 工厂类 定义Map资源,以枚举为key,策略处理器为value,构建获取方法,使其根据传参获取对应策略处理器进行特定业务
- 枚举类 自定义获取枚举的方法,与工厂类联合去获取对应策略处理器
构建方式
枚举类+工厂类+策略接口+策略处理器
枚举类

作用
供工厂类获取对应枚举,以获取对应的策略实现类
代码解析
先定义枚举类、枚举值、枚举变量、有参构造、根据条件获取对应枚举方法
其中code为枚举key,与字段类型(如红包类型、地址类型)的值类型保持一致
字段的值为1 2 3 4这种数字,则code类型就定义为整数 我这里地址类型定义为字符串了,所以用的字符串
字符串就用图上的equals进行比较就行,整数的话就用数学运算符进行比较就可以了
desc则为枚举value,是对该枚举值的描述
枚举内方法流程: 会循环遍历自身枚举值,根据code进行匹配,就会把匹配到的自身枚举值返回出去
策略接口类

作用
供工厂类获取对应策略处理器,供获取到对应策略接口时进行统一的业务方法调用
代码解析
先定义接口类、固定获取自身枚举方法、自定义业务方法
主要就是让策略处理器添加固定返回本身枚举的方法
和 定义共同行为方法(如动物叫,和动物吃 猫狗不一样,但行为相同,给他抽成方法)
策略处理器(策略接口实现类)

注意
该实现类有多个,多类型字段值有多少个就写多少实现类,
这样每种类型都能提供自身的枚举和自身的方法
作用
提供对应的枚举,作为工厂类里Map的键.
定义对应的业务方法,使其走不同的业务流程
代码解析
先定义实现类、固定获取自身枚举方法、自定义业务方法
固定返回自身枚举的方法直接返回对应类型的枚举值就行 返回类型为当前枚举 有点像多态父类接收子类值
自定义的共同业务方法 是可以传参的,你可以需要啥参数就定义什么参数 传进来用
工厂类

使用方式

- 直接在业务中注入工厂类
- 通过工厂类获取处理器的方法 获取到所对应的策略处理器
- 这时会获取到策略接口类,其实里面装的是对应的策略处理器
- 直接调用接口抽象出来的方法,即可
- 工厂传入类型的不同,就会决定调用的方法走哪个策略处理器的业务逻辑

被折叠的 条评论
为什么被折叠?



