JAVA设计模式,责任链模式

发布于:2024-12-06 ⋅ 阅读:(205) ⋅ 点赞:(0)

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求的发送者和接收者解耦。在这种模式下,请求沿着责任链传递,直到某个对象能够处理该请求为止。每个对象都有机会处理请求或将其传递给链上的下一个对象。这种模式非常适合处理多步骤或多条件的请求处理流程。

 

### 主要组成部分

 

1. **Handler(处理器)**:定义一个处理请求的接口,通常包含一个`handleRequest`方法。有时候也包含一个指向下一个处理器的引用。

2. **ConcreteHandler(具体处理器)**:实现处理请求的接口。如果能处理,则处理请求;否则,将请求传递给下一个处理器。

3. **Client(客户端)**:创建并连接处理器链,然后向链的起始点发送请求。

 

### 实现步骤

 

1. 定义一个处理器接口。

2. 创建多个具体处理器类,实现处理器接口,并决定是否处理请求或传递给下一个处理器。

3. 在客户端构建处理器链,并发送请求。

 

### 示例代码

 

假设我们有一个审批系统,不同级别的经理可以处理不同金额的报销请求。

 

#### 处理器接口

 

```java

public interface Handler {

    void setNext(Handler next);

    void handleRequest(int amount);

}

```

 

#### 具体处理器

 

```java

public class ManagerA implements Handler {

    private Handler next;

 

    @Override

    public void setNext(Handler next) {

        this.next = next;

    }

 

    @Override

    public void handleRequest(int amount) {

        if (amount <= 500) {

            System.out.println("ManagerA approved the request for " + amount + " yuan.");

        } else if (next != null) {

            next.handleRequest(amount);

        }

    }

}

 

public class ManagerB implements Handler {

    private Handler next;

 

    @Override

    public void setNext(Handler next) {

        this.next = next;

    }

 

    @Override

    public void handleRequest(int amount) {

        if (amount > 500 && amount <= 1000) {

            System.out.println("ManagerB approved the request for " + amount + " yuan.");

        } else if (next != null) {

            next.handleRequest(amount);

        }

    }

}

 

public class ManagerC implements Handler {

    private Handler next;

 

    @Override

    public void setNext(Handler next) {

        this.next = next;

    }

 

    @Override

    public void handleRequest(int amount) {

        if (amount > 1000) {

            System.out.println("ManagerC approved the request for " + amount + " yuan.");

        } else if (next != null) {

            next.handleRequest(amount);

        }

    }

}

```

 

#### 客户端

 

```java

public class Client {

    public static void main(String[] args) {

        Handler managerA = new ManagerA();

        Handler managerB = new ManagerB();

        Handler managerC = new ManagerC();

 

        // 构建责任链

        managerA.setNext(managerB);

        managerB.setNext(managerC);

 

        // 发送请求

        managerA.handleRequest(300); // ManagerA

        managerA.handleRequest(700); // ManagerB

        managerA.handleRequest(1500); // ManagerC

    }

}

```

 

### 运行结果

 

```

ManagerA approved the request for 300 yuan.

ManagerB approved the request for 700 yuan.

ManagerC approved the request for 1500 yuan.

```

 

### 总结

 

责任链模式使得多个对象有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。每个对象都不需要知道链的结构,只需要知道如何将请求传递给下一个对象即可。这种模式非常适合于处理需要多个步骤或条件判断的场景。


网站公告

今日签到

点亮在社区的每一天
去签到