面试问java的设计模式_面试必问的设计模式 之 策略者模式实现

本文介绍了如何使用策略模式解决条件判断问题,以减少代码中的if语句。通过创建策略接口和实现类,结合Spring的自动管理,实现根据不同用户名获取不同权限的用户信息。策略模式简化了代码,提高了可维护性。
摘要由CSDN通过智能技术生成

策略者模式

简单的说就是提供一种策略,实现不同的结果展示

例:

比如我们需要根据某个条件去判断用户具有的权限,我们会写很多的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 strategyMap = new ConcurrentHashMap<>();

@Autowired

public SysUserContext(Map 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);

}

}

效果展示

9650f1a0dc01367342861381b65ec84e.png

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

今天的分享就到这里,希望对看到的朋友有所帮助

小编寄语

小编创建了一个关于Java学习讨论的微信群!想进去的可以联系小编!同时也欢迎大家点赞与转发!

小编微信:372787553

备注为进群,通过后小编会邀请您进群!

Ja

va

68bfdf3476ef0c6acd06a67b23f67ce1.gif

原文始发于微信公众号(Java有货):面试必问的设计模式 之 策略者模式实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值