14-设计模式——责任链模式
设计模式——责任链模式
责任链模式 => Chain Of Responsibility
模式定义:
为请求创建了一个接收者对象的链
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。
Class Diagram
- Handler:定义处理请求的接口,并且实现后继链(successor)
package com.example.designpatterns.chainofresponsibility;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: DesignPatterns
* @description: 责任链模式
* @author: Coder_Pan
* @create: 2022-04-14 09:47
**/
public class ChainOfResponsibilityTest {
public static void main(String[] args) {
System.out.println("Chain Of Responsibility......责任链模式......");
ConcreteHandler1 handler1 = new ConcreteHandler1(null);
ConcreteHandler2 handler2 = new ConcreteHandler2(handler1);
Request request1 = new Request(RequestType.TYPE1, "request1");
handler2.handlerRequest(request1);
Request request2 = new Request(RequestType.TYPE2, "request2");
handler2.handlerRequest(request2);
}
}
/**
* 定义一个抽象 的请求接口
*
*/
@Data
abstract class Handler {
protected Handler successor;
public Handler(Handler successor) {
this.successor = successor;
}
/**
* 用于处理请求
* @param request
*/
protected abstract void handlerRequest(Request request);
}
/**
* 定义一个请求对象
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
class Request {
private RequestType type;
private String name;
}
/**
* 请求枚举类
*/
enum RequestType {
TYPE1, TYPE2
}
/**
* 实现不同的请求
*/
class ConcreteHandler1 extends Handler {
public ConcreteHandler1(Handler successor) {
super(successor);
}
@Override
protected void handlerRequest(Request request) {
if (request.getType() == RequestType.TYPE1) {
System.out.println(request.getName() + " is handle by ConcreteHandler1");
return;
}
if (successor != null) {
successor.handlerRequest(request);
}
}
}
class ConcreteHandler2 extends Handler {
public ConcreteHandler2(Handler successor) {
super(successor);
}
@Override
protected void handlerRequest(Request request) {
if (request.getType() == RequestType.TYPE2) {
System.out.println(request.getName() + " is handle by ConcreteHandler2");
return;
}
if (successor != null) {
successor.handlerRequest(request);
}
}
}
posted on 2022-04-14 10:04 JavaCoderPan 阅读(12) 评论(0) 编辑 收藏 举报 来源