原创帖子,转载请注明出处: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开始