Definição: A cadeia de padrão de responsabilidade cria uma cadeia do objeto receptor para a solicitação. Esse padrão fornece o tipo de solicitação, dissociando o remetente e o destinatário da solicitação. Esse tipo de padrão de design pertence ao padrão comportamental. Nesse modo, geralmente cada destinatário contém uma referência a outro destinatário. Se um objeto não puder processar a solicitação, ele passa a mesma solicitação para o próximo receptor e assim por diante.
Recursos: 1. Reduza o grau de acoplamento. Descarra o remetente e o receptor da solicitação.
2. simplificou o objeto. Isso torna o objeto não necessário para conhecer a estrutura da cadeia.
3. Aumente a flexibilidade para atribuir responsabilidades ao destino. Ao alterar os membros da cadeia ou mobilizar sua ordem, ela permite adição ou exclusão dinâmica de responsabilidades.
4. É muito conveniente adicionar novas classes de processamento de solicitação.
Aplicações no desenvolvimento de nível corporativo e estruturas comumente usadas: mola, struts interceptores, filtro de servlet
Exemplos específicos:
/** * Aqui está um exemplo de licença de uma empresa: * 1. Alguém se despediu (evento) *2. Aprovação do líder da equipe do projeto: a aprovação pode ser aprovada menos de três dias e solicita superiores mais de três dias*3. Aprovação do supervisor do departamento: a aprovação pode ser aprovada menos de dez dias e solicita superiores mais de dez dias*4. Aprovação do gerente geral: a aprovação pode ser aprovada menos de 30 dias e não aprova mais de 30 dias*/classe pública Demo {public static void main (string [] args) {event Event = new Event ("Programador", 32, "retorne a Hometown para visitar relativos"); Líder a = novo groupleader ("Zhang San"); Líder B = novo gerente ("li si"); Líder c = new GeneralManager ("Wang Wu"); // Especifique a cadeia do modo de responsabilidade A.SetNextLeader (B); B.SetNextLeader (C); A.Handler (evento); }}/** Dias privados int; Razão privada da string; Evento público (nome da string, int Days, String Reason) {super (); this.name = nome; this.days = dias; this.Reason = Motivo; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public int getDays () {retorno dias; } public void SetDays (int Days) {this.Days = Days; } public string getReason () {return Rotity; } public void setreason (string reason) {this.Reason = reason; }}/*** Objeto de cadeia de responsabilidade abstrato, todos os objetos de cadeia de responsabilidade reais a seguir são herdados deste objeto*/líder de classe abstrata {nome da string privada; líder protegido Nextleader; // O próximo objeto de responsabilidade na cadeia de responsabilidade, essa é a base para manter a cadeia de responsabilidade líder público (nome da corda) {super (); this.name = nome; } public void setNextLeader (líder próximo) {this.NextLeader = NextLeader; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } manipulador de vazio abstrato protegido (evento do evento);}/*** O primeiro objeto no processo de licença, líder do grupo*/classe Grouppleader estende o líder {public groupleader (nome da string) {super (nome); } manipulador de void protegido (evento de evento) {if (event.getDays () <3) { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Razão de licença: " + event.getReason () +" | "); System.out.println ("Aprovador:"+this.getName ()+"(líder do grupo), passe!"); System.out.println (); } else {System.out.println (this.getName ()+"(supervisor), sem permissões!"); this.NextLeader.Handler (evento); }}}/*** O segundo objeto no processo de licença, gerente de departamento*/gerente de classe estende líder {public Manager (nome da string) {super (nome); } manipulador de void protegido (evento de evento) {if (event.getDays () <10) { System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println (this.getName ()+"(Gerente geral), sem permissões!"); 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+event.getName ()+" | "); System.out.println (" Número de dias de licença: "+event.getDays ()+" dias "+" | "); System.out.println (" | Razão para licença: "+event.getReason ()+" | "); System.out.println (" UPEMPERN: "this.getName ()+"); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+event.getName ()+" |. "); System.out.println ();}}}O modelo de cadeia de responsabilidade é usado principalmente para desenvolvimento, como controle de processos. Comparado com o modelo IF-ELSE, ele tem maior eficiência na modificação e integração do código, o que é mais propício à manutenção do código. Além disso, quando é necessário adicionar objetos na cadeia de responsabilidade, precisamos implementar uma classe de cadeia de responsabilidade específica, criar um objeto de responsabilidade e manter o relacionamento da cadeia de responsabilidade, sem maior sobrecarga. Além disso, no design real, muitas vezes, a manutenção da cadeia de responsabilidade é realizada no arquivo de configuração, que economizará mais tempo de desenvolvimento.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.