设计模式详解(最详细了!!!!)

用途: 用于简化代码复杂度,解除耦合,使代码简单化

优点: 让懂的人更有效率的去完成开发.

缺点: 缺点肯定就是不懂的人看不懂呀.

工厂+策略

场景用途

适用于根据不同的字段值去进行不同的业务逻辑,

如 红包类型(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的键.

定义对应的业务方法,使其走不同的业务流程

代码解析

先定义实现类、固定获取自身枚举方法、自定义业务方法

固定返回自身枚举的方法直接返回对应类型的枚举值就行 返回类型为当前枚举 有点像多态父类接收子类值

自定义的共同业务方法 是可以传参的,你可以需要啥参数就定义什么参数 传进来用

工厂类

使用方式

  1. 直接在业务中注入工厂类
  2. 通过工厂类获取处理器的方法 获取到所对应的策略处理器
  3. 这时会获取到策略接口类,其实里面装的是对应的策略处理器
  4. 直接调用接口抽象出来的方法,即可
  5. 工厂传入类型的不同,就会决定调用的方法走哪个策略处理器的业务逻辑
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值