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

前提

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

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

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

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

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

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

思路

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

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

步骤

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

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

工厂代码实现:

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

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

这里types名称需要一一对应

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

最后测试:

相关推荐
Geoking.4 天前
【设计模式】策略模式(Strategy)详解:把 if-else 变成可切换的算法
java·设计模式·策略模式
sxlishaobin4 天前
设计模式之策略模式
设计模式·策略模式
ExiFengs5 天前
Java使用策略模式实现多实体通用操作的优雅设计
java·开发语言·设计模式·策略模式
雪域迷影7 天前
MacOS中安装并配置Redis
redis·macos·策略模式
有个人神神叨叨7 天前
AITalk:从零到一打造 macOS 系统级语音输入引擎
macos·策略模式
且去填词8 天前
DeepSeek :基于 AST 与 AI 的遗留系统“手术刀”式治理方案
人工智能·自动化·llm·ast·agent·策略模式·deepseek
Byron Loong8 天前
【系统】Mac系统和Linux 指令对比
linux·macos·策略模式
Coder码匠9 天前
策略模式的实际应用:从单一数据源到多数据源架构
java·架构·策略模式
星河耀银海9 天前
C++开发入门——环境搭建与第一个程序
开发语言·c++·策略模式
__万波__10 天前
二十三种设计模式(二十二)--策略模式
java·设计模式·策略模式