\
以汽车组装为例子来说明
package responsibility;
/**
* 定义的汽车生产处理的抽象类
* <p>Title: CarHandler</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午7:44:53
* @version 1.0
*/
public abstract class CarHandler {
//继承这个类必须实现的处理方法
public abstract void HandlerCar();
//对应的下一个处理过程
public CarHandler nextCarHandler;
//设置下一个处理的Handler
public CarHandler setNextHandler(CarHandler carHandler) {
this.nextCarHandler = carHandler;
return this.nextCarHandler;
}
}
package responsibility;
/**
* 组装车头
* <p>Title: Header_CarHandler</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午8:19:35
* @version 1.0
*/
public class Header_CarHandler extends CarHandler{
/**
* 业务处理方法
*/
@Override
public void HandlerCar() {
System.out.println("组装车头");
if(this.nextCarHandler !=null){
//调用下一个过程的业务处理方法
this.nextCarHandler.HandlerCar();
}
}
}
package responsibility;
/**
* 车身的处理过程
* <p>Title: Body_CarHandler</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午8:30:47
* @version 1.0
*/
public class Body_CarHandler extends CarHandler{
/**
* 处理车身的业务方法
* <p>Title: HandlerCar</p>
* <p>Description: </p>
* @see responsibility.CarHandler#HandlerCar()
*/
@Override
public void HandlerCar() {
System.out.println("组装车身...");
if(this.nextCarHandler !=null){
//调用下一个处理过程
this.nextCarHandler.HandlerCar();
}
}
}
package responsibility;
/**
* 车尾的处理过程
* <p>Title: Body_CarHandler</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午8:30:47
* @version 1.0
*/
public class Tail_CarHandler extends CarHandler{
/**
* 处理车尾的业务方法
* <p>Title: HandlerCar</p>
* <p>Description: </p>
* @see responsibility.CarHandler#HandlerCar()
*/
@Override
public void HandlerCar() {
System.out.println("组装车尾...");
if(this.nextCarHandler !=null){
//调用下一个处理过程
this.nextCarHandler.HandlerCar();
}
}
}
package responsibility;
public class MainClass {
public static void main(String[] args) {
CarHandler head_Carhandler = new Header_CarHandler();
CarHandler body_Carhandler = new Body_CarHandler();
CarHandler tail_Carhandler = new Tail_CarHandler();
//组装顺序预先设定好,顺序是车头-->车身-->车尾
head_Carhandler.setNextHandler(body_Carhandler);
body_Carhandler.setNextHandler(tail_Carhandler);
tail_Carhandler.setNextHandler(null);
//调用职责链的链头来完成操作
head_Carhandler.HandlerCar();
//顺序改变,希望是车身-->车头--车尾
body_Carhandler.setNextHandler(head_Carhandler);
head_Carhandler.setNextHandler(tail_Carhandler);
body_Carhandler.HandlerCar();
//简便操作
body_Carhandler.setNextHandler(head_Carhandler).setNextHandler(tail_Carhandler);
body_Carhandler.HandlerCar();
}
}