【Padrão de Design】——15, Padrão de Cadeia de Responsabilidade

(15) Modelo de Cadeia de Responsabilidade

O padrão Chain of Responsibility considera cada nó na cadeia como um objeto, cada nó é responsável por processar diferentes solicitações e mantém automaticamente o próximo objeto nó internamente. Por meio do modo de cadeia de responsabilidade, o desacoplamento é bem realizado e os nós de objeto são responsáveis ​​por sua própria responsabilidade.

1. Princípios de Design de Padrão de Cadeia de Responsabilidade

Abstract Handler: Defina um método de processamento de solicitação e mantenha uma referência para o próximo nó do objeto de processamento;

Manipulador concreto (ConcreateHandler): Processe a solicitação.

2. Exemplo simples

Na lógica de negócios de login, as informações do usuário precisam ser verificadas, julgadas, autenticadas e outras operações.Usando o modo de cadeia de responsabilidade, cada processador pode cooperar entre si para concluir o processamento de negócios de login.

public abstract class Handler {
    
    
    protected Handler chain;
//    负责将当前获取对象置为全局对象
    public void next(Handler handler){
    
    
        this.chain = handler;
    }
//   自己的业务逻辑处理
    public abstract void doHandler(Member member);
}
public class ValidHandler extends Handler {
    
    
    @Override
    public void doHandler(Member member) {
    
    
        if(null == member.getUsername() || null ==member.getPassword()){
    
    
            System.out.println("用户名或密码为空!");
            return;
        }
        System.out.println("用户名密码校验成功!");
        chain.doHandler(member);
    }
}
public class LoginHandler extends Handler {
    
    
    @Override
    public void doHandler(Member member) {
    
    
        System.out.println("登录成功!");
        member.setInfo("管理员");
        chain.doHandler(member);
    }
}
public class AuthHandler extends Handler {
    
    
    @Override
    public void doHandler(Member member) {
    
    
        if(!"管理员".equals(member.getInfo())){
    
    
            System.out.println("您不是管理员,没有操作权限!");
            return;
        }
        System.out.println("欢迎管理员!");
    }
}
public class Member {
    
    
    private String username;
    private String password;
    private String info;

    public Member(String username, String password, String info) {
    
    
        this.username = username;
        this.password = password;
        this.info = info;
    }
    //getter,setter
}
public class MemberService {
    
    
    public void login(String username,String password){
    
    
        ValidHandler validHandler = new ValidHandler();
        LoginHandler loginHandler = new LoginHandler();
        AuthHandler authHandler = new AuthHandler();

//        责任链模式的业务处理顺序,分别指定各处理器的当前对象
        validHandler.next(loginHandler);
        loginHandler.next(authHandler);

        validHandler.doHandler(new Member(username,password,"管理员"));
    }
}
public class Client {
    
    
    public static void main(String[] args) {
    
    
        MemberService memberService = new MemberService();
        memberService.login("lsk","123");
    }
}
imagem-20210314121201123

3. Avaliação do Modelo de Cadeia de Responsabilidade

O modo de cadeia de responsabilidade pode realizar a dissociação de solicitação e processamento e, ao mesmo tempo, pode ser tratado de forma flexível e pode ser expandido dinamicamente. Uma longa cadeia de responsabilidade também pode levar a tempos de processamento mais longos e sistemas complexos.

Acho que você gosta

Origin blog.csdn.net/qq_40589204/article/details/118054636
Recomendado
Clasificación