Java设计模式之策略者模式

策略者模式

简单的说就是提供一种策略,实现不同的结果展示
例:
比如我们需要根据某个条件去判断用户具有的权限,我们会写很多的if(){}这样的判断,而策略者就是为了解决这样的问题;
当然他也很多缺点,还是要根据实际情况进行应该

基于Spring实现

1.策略者
public interface AbstractHandler {

    /**
     * 策略接口
     * @param userName
     * @return
     */
    SysUser handle(String userName);

}
2.策略实现
@Component(value = "dylan")
public class SysUserPermit implements AbstractHandler {

    @Override
    public SysUser handle(String userName) {
        SysUser sysUser = new SysUser.SysUserBuild().
                        setRole("admin").
                        setUserName("dylan").
                        setPassWord("dylan").
                        setUserType("select insert update delete").buildTwo();
        return sysUser;
    }

}
----------------------------------------------------------------------
@Component(value = "yhj")
public class SysUserRole implements AbstractHandler{

    @Override
    public SysUser handle(String userName) {
        SysUser sysUser = new SysUser.SysUserBuild().
                setRole("guset").
                setUserName("yhj").
                setPassWord("yhj").
                setUserType("select").buildTwo();
        return sysUser;
    }
}
3.客户端
public class SysUserContext {

    /**
     * 通过Spring上下文实现自动管理,获取不同的ID进行匹配
     */
    @Autowired
    private final Map<String, AbstractHandler> strategyMap = new ConcurrentHashMap<>();

    @Autowired
    public SysUserContext(Map<String, AbstractHandler> strategyMap) {
        this.strategyMap.clear();
        strategyMap.forEach((k, v)-> this.strategyMap.put(k, v));
    }

    /**
     * 根据不同用户名查询
     * @param userName
     * @return
     */
    public SysUser getResource(String userName){
        return strategyMap.get(userName).handle(userName);
    }
}

调用实例

@RestController
@RequestMapping(value = "/javayh/")
public class SysUserController {

    @Autowired
    private SysUserContext sysUserContext;

    /**
     * 根据用户名查询用户信息
     * @param userName
     * @return
     */
    @GetMapping(value = "query/{userName}")
    public Result query(@PathVariable String userName){
        SysUser resource = sysUserContext.getResource(userName);
        return Result.javaYhQuerySuccess(resource);
    }
}

效果展示

在这里插入图片描述
在这里插入图片描述
从上面的效果可以看出,我们只需要关注用户名即可,具体如何去掉用我们不在关注,无需在写if的判断,可以说是if的高级写法吧!

今天的分享就到这里,希望对看到的朋友有所帮助
如果有疑问可以联系小编,372787553
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值