java责任链模式

定义:

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

优点: 

1、降低耦合度。它将请求的发送者和接收者解耦。

2、简化了对象。使得对象不需要知道链的结构。

3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。

4、增加新的请求处理类很方便。

缺点:

 1、不能保证请求一定被接收。

2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。

3、可能不容易观察运行时的特征,有碍于除错

适用场景:

就像开始的例子那样,假如使用if…else…语句来组织一个责任链时感到力不从心,代码看上去很糟糕时,就可以使用责任链模式来进行重构。

实现代码:

package chainOfResponsibility;
public class ChainOfResponsibilityPattern
{
    public static void main(String[] args)
    {
        //组装责任链 
        Handler handler1=new ConcreteHandler1(); 
        Handler handler2=new ConcreteHandler2(); 
        handler1.setNext(handler2); 
        //提交请求 
        handler1.handleRequest("t
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者对其进行处理。在责任链模式中,每个处理者都可以决定是否将请求传递给下一个处理者,以及何时停止传递。 在Java中,责任链模式通常由一个抽象处理者类和多个具体处理者类组成。每个具体处理者类都实现了抽象处理者类,并且在处理请求时可以选择将其传递给下一个处理者或停止传递。 以下是一个简单的Java责任链模式示例: ```java public abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handleRequest(Request request);} public class ConcreteHandler1 extends Handler { public void handleRequest(Request request) { if (request.getLevel() <= 1) { System.out.println("ConcreteHandler1 handled the request."); } else if (successor != null) { successor.handleRequest(request); } } } public class ConcreteHandler2 extends Handler { public void handleRequest(Request request) { if (request.getLevel() <= 2) { System.out.println("ConcreteHandler2 handled the request."); } else if (successor != null) { successor.handleRequest(request); } } } public class Request { private int level; public Request(int level) { this.level = level; } public int getLevel() { return level; } } public class Client { public static void main(String[] args) { Handler handler1 = new ConcreteHandler1(); Handler handler2 = new ConcreteHandler2(); handler1.setSuccessor(handler2); Request request1 = new Request(1); handler1.handleRequest(request1); Request request2 = new Request(2); handler1.handleRequest(request2); Request request3 = new Request(3); handler1.handleRequest(request3); } } ``` 在上面的示例中,我们定义了一个抽象处理者类Handler和两个具体处理者类ConcreteHandler1和ConcreteHandler2。每个处理者都可以处理请求,或将其传递给下一个处理者。我们还定义了一个Request类,它包含请求的级别。 在客户端代码中,我们创建了两个处理者对象,并将它们链接在一起形成一个处理者链。然后,我们创建了三个请求对象,并将它们发送到处理者链中进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值