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

前提

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

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

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

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

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

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

思路

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

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

步骤

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

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

工厂代码实现:

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

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

这里types名称需要一一对应

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

最后测试:

相关推荐
geovindu13 天前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
geovindu14 天前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
沪上企服通16 天前
代账数据的可移植性设计:开放接口、账套导出与 exit strategy 工程笔记(上海 5 家样本对照)
笔记·策略模式
码匠许师傅16 天前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
++==19 天前
基于策略模式的应用层协议支持
策略模式
Java后端的Ai之路19 天前
23、Python - 策略模式
linux·python·策略模式
程序员夏洛21 天前
什么是策略模式?一般用在什么场景?
策略模式
user_admin_god21 天前
数据采集/交换系统设计经验
spring boot·spring·策略模式
Nontee1 个月前
Quartz 集群 + 策略模式:逾期预警推送系统设计实录
linux·服务器·策略模式
二炮手亮子1 个月前
从 BIO、NIO、AIO 到多路复用与 Netty
策略模式·nio