利用工厂模式和策略模式实现不同方式登陆

工厂模式:工厂是创建型模式,它的作用就是创建对象。将对象统一管理,在业务不同时在调用不同的对象进行使用

策略模式:我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

这里将实现利用工厂模式和策略模式实现多种类型方式登陆,后期也利于拓展更多方式

一、首先创建工厂管理对象,这里管理的是不同的登陆对象

@Component
public class LoginBuildFactory {

    /**
     * 将登陆service对象统一管理
     */
    @Resource
    private Map<String, LoginService> strategyMap=new ConcurrentHashMap<>();

    /**
     * 不同登陆方式获取不同的登陆业务对象
     * @param strategyName 登陆类型参数
     * @return
     */
    public LoginService getBuildNameByService(String strategyName){
        LoginService loginService=strategyMap.get(strategyName);
        if(ObjectUtils.isNull(loginService)){
            throw new RuntimeException("未找到"+strategyName+"类型的服务");
        }
        return loginService;
    }
}

二、创建两个不同登陆业务对象

//系统登陆
@Service(EnumLoginType.system)
public class LoginServiceImpl implements ILoginService {
    
    @Override
    public Map login(UserEntity entity) {
        //TODO 登陆逻辑
        return map;
    }
}

//微信登陆
@Service(EnumLoginType.wx)
public class WxLoginServiceImpl implements ILoginService {
    
    @Override
    public Map wxLogin(UserEntity entity) {
        //TODO 登陆逻辑
        return map;
    }
}


//接口
public interface ILoginService {
    Map login(UserEntity entity);//登陆
}

启动项目时会使用单列模式创建这两个对象,并且被放在strategyMap这个map中进行管理

三、接口调用

    @PostMapping("/login")
     public Result list(@RequestBody UserEntity entity) {
        //获取相关的业务bean
        LoginBuildService loginService =buildFactory.getWxTemplateBodyBuildName(entity.getLoginType());
        //登陆业务处理
        Map map=loginService.login(entity);
        return Result.ok(Map);
    }

通过传入的登陆类型从map中取出对应的登陆对象,再通过当前对象调用登陆方法,简单实现工厂加策略模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值