设计模式之----Java责任链模式

最近学习了下责任链模式,进行记录一下。
责任链模式:
将链中的每一个节点看作一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端出发时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。它属于行为型模式。
应用场景:
1.多个对象可以处理同一个请求,但是具体由哪个对象处理则在动态中决定。
2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
让请求和处理 进行解耦。

来一个业务场景:
用户登录系统,判断用户的角色是否有权限操作。
按照之前的写法,会先通过if判断用户的账号和密码是否正确,再通过if判断是否有权限。
那么使用责任链模式,就可以对这个请求进行解耦,各自模块的类处理对应的业务,同时可以让代码更加优雅化。
通过代码如下:
1.实体类

@Data
public class Member implements Serializable {

    public String loginName;

    public String password;

    public String roleName;

    public Member(String loginName, String password) {
        this.loginName = loginName;
        this.roleName = password;
    }

}

在这里插入图片描述
2.定义Handler

public abstract class Handler {

    protected  Handler next;

    public void next(Handler next){
        this.next = next;
    }


    public abstract void doHandler(Member member);
}

在这里插入图片描述
3.分别实现不同业务功能,进行继承责任链的Handler
3.1校验登录参数模式

public class ValidateHandler extends Handler {

    @Override
    public void doHandler(Member member) {
         String loginName = member.getLoginName();
         if(StringUtils.isEmpty(loginName)){
             System.out.println("用户名和密码为空");
             return;
         }
         System.out.println("用户名和密码不为空的可以往下执行");
    }

}

在这里插入图片描述
3.2登录模块实现业务

public class LoginHandler extends Handler {
    @Override
    public void doHandler(Member member) {
        System.out.println("登录成功");
        member.setRoleName("管理员");
        next.doHandler(member);
    }
}

在这里插入图片描述
3.3权限模块处理

public class AuthHandler extends Handler {
    @Override
    public void doHandler(Member member) {
        if(!"管理员".equals(member.getRoleName())){
            System.out.println("您不是管理员,没有操作权限");
            return;
        }
        System.out.println("允许操作");
        next.doHandler(member);
    }

}

在这里插入图片描述
4.接口通过不同的实现类,定义和整合

public class MemberService {

    public  void  login(String loginName,String password){
        Handler validateHandler = new ValidateHandler();
        Handler loginHandler = new LoginHandler();
        Handler authHandler = new AuthHandler();
        validateHandler.next(loginHandler);
        loginHandler.next(authHandler);

        validateHandler.doHandler(new Member(loginName,password));


    }

}

在这里插入图片描述

5.通过测试类进行测试

public class Test {

    public static void main(String[] args) {
        MemberService memberService = new MemberService();
        memberService.login("123","123");
    }
}

在这里插入图片描述
以上就是一个简单的责任链模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

virtuousOne

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

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

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

打赏作者

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

抵扣说明:

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

余额充值