职责链模式


原创帖子,转载请注明出处:http://blog.csdn.net/sbvfhp/article/details/48227309


有这样的需求:

1、一个任务,由若干子任务协调完成。
2、这些子任务之间存在一定的依赖关系,子任务之间的依赖关系是运行时动态决定的。
3、任务的调用者需要和每个独立的子任务解耦。

对于类似这样的需求,就可以考虑用责任链设计模式。

职责链可以是直线型的链结构,环型的链结构,还可以是树型的链结构。我们这里讨论的是直线型的,也是最常见的。

在数据结构里有一种重要的结构。叫做链表,链表每个节点都有指针指向它的下一个节点。
我们这里讨论的责任链和链表非常相似。责任链是将一个任务分为若干个独立的步骤。每个独立的步骤包含对下一个步骤的引用。这样整个任务的调度者可以和每个独立的任务解耦。整个任务的流程也可以十分清晰。


/**
 * @author 李建 
 * 2015-09-05
 * 定义一个super
 */
public abstract class SuperHandler
{
	public SuperHandler mSuperHandler;
	
	public abstract void handleStep();
	
	public SuperHandler setNextHandler(SuperHandler pSuperHandler)
	{
		this.mSuperHandler = pSuperHandler;
		return this.mSuperHandler;
	}
}


/**
 * @author 李建 
 * 2015-09-05
 * 定义任务第一步子任务
 */
public class Step1Handler extends SuperHandler
{
	@Override
	public void handleStep()
	{
		System.out.println("Step1开始");
		if (this.mSuperHandler != null)
		{
			this.mSuperHandler.handleStep();
		}
	}
}


/**
 * @author 李建 
 * 2015-09-05
 * 定义任务第二步子任务
 */
public class Step2Handler extends SuperHandler
{
	@Override
	public void handleStep()
	{
		System.out.println("Step2开始");
		if (this.mSuperHandler != null)
		{
			this.mSuperHandler.handleStep();
		}
	}
}


/**
 * @author 李建 
 * 2015-09-05
 * 定义任务第三步子任务
 */
public class Step3Handler extends SuperHandler
{
	@Override
	public void handleStep()
	{
		System.out.println("Step3开始");
		if (this.mSuperHandler != null)
		{
			this.mSuperHandler.handleStep();
		}
	}
}


public class MainClass
{
	public static void main(String[] args)
	{
		SuperHandler step1 = new Step1Handler();
		SuperHandler step2 = new Step2Handler();
		SuperHandler step3 = new Step3Handler();
		
		step1.setNextHandler(step2).setNextHandler(step3);
		step1.handleStep();
	}
}

运行结果:

Step1开始
Step2开始
Step3开始





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值