设计模式之责任链设计模式

责任链设计模式的思想很简单,就是按照链的顺序执行一个个处理方法,链上的每一个任务都持有它后面那个任务的对象引用,以方便自己这段执行完成之后,调用其后面的处理逻辑。

下面是一个责任链设计模式的简单的实现:

public interface Task {
	public void run();
}
public class Task1 implements Task{
	
	private Task task;

	public Task1() {}
	
	public Task1(Task task){
		this.task = task;
	}
	@Override
	public void run() {
		System.out.println("task1 is run");
		if(task != null){
			task.run();
		}
	}
}
public class Task2 implements Task{

	private Task task;

	public Task2() {}
	
	public Task2(Task task){
		this.task = task;
	}
	@Override
	public void run() {
		System.out.println("task2 is run");
		if(task != null){
			task.run();
		}
	}
}
public class Task3 implements Task{

	private Task task;

	public Task3() {}
	
	public Task3(Task task){
		this.task = task;
	}
	@Override
	public void run() {
		System.out.println("task3 is run");
		if(task != null){
			task.run();
		}
	}
}

以上代码是模拟了三个任务类,它们都实现了统一个接口,并且它们都一个构造函数,可以在它们初始化的时候就持有另一个任务类的对象引用,以方便该任务调用。这个和服务器的过滤器有点类似,过滤器的实现也都是实现了同一个接口Filter。

public class LiabilityChain {

	public void runChain(){
		Task task3 = new Task1();
		Task task2 = new Task2(task3);
		Task task1 = new Task3(task2);
		task1.run();
	}
}

上面这段代码就是一个任务链对象,它要做的事情很简单,就是将所有要执行的任务都按照指定的顺序串联起来。

public class ChainTest {

	public static void main(String[] args) {
		LiabilityChain chain = new LiabilityChain();
		chain.runChain();
	}
}

当我们获取到责任链对象之后,调用其方法,得到以下运行结果:

输入图片说明

以上是一个责任链的简单的实现,如果想要深入理解其思想,建议去观察一个过滤器链的执行源码。

转载于:https://my.oschina.net/u/3441184/blog/889552

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值