java里面的责任链模式

今天看项目突然发现里面用到了责任链模式,然后百度了下觉得人家写的挺好的,以前看了设计模式觉得很抽象,但那个哥们的举的例子很好。

1.责任链

顾明思议就是一条链,可以理解为一个链表

a--->b--->c

一条链上面有3个任务节点,a处理完以后b处理,b处理完c处理。

类的定义

public class A {
    private B next;
    public void setNext(B b) {
        this.next=b;
    }
    public void work()
    {
        System.out.println("A在工作");
        next.work();;
    }
}
public class B {
    private C next;
    public void setNext(C c) {
        this.next=c;
    }
    public void work() {
        System.out.println("B在工作");
        next.work();
    }
}
public class C {
    public void work()
    {
        System.out.println("C在工作");
    }
}
        A a=new A();
        B b=new B();
        C c=new C();
        a.setNext(b);
        b.setNext(c);
        a.work();

程序输出结果

A在工作
B在工作
C在工作

这个就是最简单的责任链模式

下面具体到项目当中的实际应用场景

比如讲有4个具体业务逻辑需要处理且存在顺序关系,当然这4个业务是可以拓展出来的更多的

那么可能会这样写代码

{

业务A代码

业务B代码

业务C代码

业务员D代码

}

当然我认为这样是完全可行的,所有讲如果能够接受代码堆在一起设计模式就显得脱裤裤子放屁了,因为大家都在追求项目的可维护性,但实际开发过程当中,这似乎不是项目可维护,功能可拓展的主要问题,哈哈。

具体上代码

定义一个任务的抽象类work方法是链式调用关系,handler方法具体任务类可以进行重写实现自己的业务逻辑

public abstract class AbstractTask {
    private AbstractTask next;
    public void setNext(AbstractTask task) {
        this.next=task;
    }
    public void work(String content){
        if(next!=null) {
            this.handler(content);
            next.work(content);
        }
    };
    //处理我的工作
    public abstract void handler(String content);
}

TaskA的任务处理

public class TaskA extends AbstractTask {
    @Override
    public void handler(String content) {
        if(content==null)
        {
            throw new RuntimeException("遇到异常处理结束");
        }
        //处理A任务的业务逻辑
        System.out.println("我是taskA我在处理任务");

    }
}

TaskB的任务处理

public class TaskB extends AbstractTask {
    @Override
    public void handler(String content) {
        if(content==null) {
            throw new RuntimeException("遇到异常处理结束");
        }
        //处理B任务的业务逻辑
        System.out.println("我是taskB我在处理任务");
    }
}
        AbstractTask taskA=new TaskA();
        AbstractTask taskB=new TaskB();
        taskA.setNext(taskB);
        taskA.work("待处理内容");

后续可能会有更多的业务逻辑需要处理,只需要添加一个任务类就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值