工厂模式+策略模式完成多种登录模式的实现

前提

(简单工厂不属于设计模式,而是一种编程思想【抽象一层出来】)工厂方法模式、抽象工厂模式

以上都是为了解耦,如果考虑多个纬度(如需要同时考虑多种电器,多种品牌)则优先考虑抽象工厂。

工厂方法模式是给每一个产品增加一个对应的工厂,然后该工厂依赖于抽象工厂,相当于每加一个产品,就多了两个依赖关系。

策略模式与工厂方法的区别:工厂方法是基于多态,通过不同的对象参数,去找对应的工厂,进而拿到不同的对象;策略方法也是基于多态,但是是通对行为(方法)的拓展。

策略模式的优点:易于拓展、避免重复的ifelse嵌套,充分发挥了面向对象的优点、易于拓展

缺点:会生成很多的策略类、客户端必须知道所有的策略类,并自行决定使用哪一个策略类

思路

提供了多种(登录)策略【配置在yaml文件中】,并且交给Spring容器去管理【这里通过aware接口去拿到applicationContext容器,在bean容器初始化的时候读取并加入到map中】

提供了一个工厂(UserLoginFactory),同时提供一个方法,根据参数提供策略对象(多态,这里返回值是接口,然后多种策略模式去实现该接口)。

步骤

我们将多种不同的策略对象以及工厂都放在一个包下,AccountGranter、SmsGranter分别代表账号登录方式以及短信登录方式。

将多种登录方式抽象出来(工厂模式,解耦)

工厂代码实现:

我们在bean完成自动注入后,通过applicationContext容器将对象全部放到map中

application.yaml中自定义配置:配置多种登录方式,我们可以创建一个配置类,去读取【ConfigurationProperties注解】

这里types名称需要一一对应

本人比较懒,所有的实体类都用的@Data注解,这一行是精髓,通过前端发出的参数得到策略对象,进而调用登录的逻辑。

最后测试:

相关推荐
头发还在的女程序员5 天前
【免费下载】企业能源管理系统
小程序·策略模式·能源管理
前端 贾公子5 天前
React 和 Vue 都离不开的表单验证库 async-validator 之策略模式的应用 (上)
vue.js·react.js·策略模式
小米4966 天前
Js设计模式---策略模式
设计模式·策略模式
geovindu6 天前
python: Strategy Pattern
python·设计模式·策略模式
Hello.Reader9 天前
Flink 任务失败恢复机制Restart Strategy 和 Failover Strategy 怎么配才“又稳又不炸”
大数据·flink·策略模式
武帝为此11 天前
【Linux strace命令介绍】
linux·运维·策略模式
带娃的IT创业者12 天前
解密OpenClaw系列10-OpenClawSparkle框架集成
软件工程·agent·策略模式·自动更新·ai智能体·智能体开发·openclaw
茶本无香13 天前
【无标题】
java·设计模式·策略模式
驴儿响叮当201015 天前
设计模式之策略模式
设计模式·策略模式
kong790692816 天前
设计模式-策略模式
设计模式·策略模式·行为设计模式