今天看项目突然发现里面用到了责任链模式,然后百度了下觉得人家写的挺好的,以前看了设计模式觉得很抽象,但那个哥们的举的例子很好。
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("待处理内容");
后续可能会有更多的业务逻辑需要处理,只需要添加一个任务类就好了。