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

前提

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

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

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

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

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

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

思路

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

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

步骤

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

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

工厂代码实现:

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

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

这里types名称需要一一对应

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

最后测试:

相关推荐
xcntime1 天前
Python中print函数如何实现不换行输出?
策略模式
青春易逝丶2 天前
策略模式
java·开发语言·策略模式
sg_knight2 天前
设计模式实战:策略模式(Strategy)
java·开发语言·python·设计模式·重构·架构·策略模式
liangshanbo12152 天前
[特殊字符] macOS 上的 zoxide:智能目录跳转终极指南
macos·策略模式
Rabbit_QL4 天前
【Warp+Claude】任务完成自动通知(macOS + Warp 版)
macos·策略模式
Sahadev_6 天前
macOS 解决 AirDrop 传输应用“已损坏“问题,以sublime为例
macos·策略模式·sublime text
筱璦6 天前
期货软件开发「启动加载页 / 初始化窗口」
前端·c#·策略模式·期货
喵叔哟7 天前
2.【.NET10 实战--孢子记账--产品智能化】--升级前的准备工作:项目依赖梳理与升级计划制定
.net·策略模式
qq_232045577 天前
精积微半导体面试(部分)
netty·策略模式·nio·内存抖动·threadlocal·bitmap·复用
badhope8 天前
OpenClaw卸载命令全解析
java·linux·人工智能·python·sql·数据挖掘·策略模式