責(zé)任鏈組成部分:
1.AbstractHandler抽象類 提供這個責(zé)任鏈要做的事情 例如:制作手機
2.HandlerChainContext handler上下文子眶,我主要負(fù)責(zé)維護(hù)鏈,和鏈的執(zhí)行 例如:工廠匈织,我這里提供了每個步驟的車間 執(zhí)行操作的工具
3.Pipeline 初始還任務(wù)順序以及注冊要執(zhí)行的任務(wù) 例如:原料來了,我先要組裝吴菠,組裝注冊進(jìn)去;組裝完成,包裝開始
4.Handler (多個)具體實現(xiàn)枣接,例如:組裝手機、包裝缺谴、貼標(biāo)簽
簡單說:第一步創(chuàng)建一個對象但惶,如果有下一步, 下一步就注冊為此步驟的子對象湿蛔,如果還有下一步膀曾,就注冊為子對象的子對象~然后依次執(zhí)行
代碼如下:
abstract class AbstractHandler {
/**
? ? * 處理器,這個處理器就做一件事情阳啥,在傳入的字符串中增加一個尾巴..
*/
? ? abstract void doHandler(HandlerChainContext handlerChainContext, String arg0); // handler方法
}
public class HandlerChainContext {
HandlerChainContextnext; // 下一個節(jié)點
? ? AbstractHandlerhandler;
? ? public HandlerChainContext(AbstractHandler handler) {
this.handler = handler;
? ? }
void handler(String arg0) {
this.handler.doHandler(this, arg0);
? ? }
/**
? ? * 繼續(xù)執(zhí)行下一個
? ? */
? ? void runNext(String arg0) {
System.out.println("-----------");
? ? ? ? if (this.next !=null) {
this.next.handler(arg0);
? ? ? ? }
}
}
public class Pipeline {
HandlerChainContexthead;
? ? public void requestProcess(String arg0) {
this.head.handler(arg0);
? ? }
public void addLast(AbstractHandler handler) {
if(head ==null){
head =new HandlerChainContext(handler);
? ? ? ? }else{
HandlerChainContext context =head;
? ? ? ? ? ? if (context.next !=null) {
context = context.next;
? ? ? ? ? ? }
context.next =new HandlerChainContext(handler);
? ? ? ? }
}
}
public class Handler extends AbstractHandler{
void doHandler(HandlerChainContext handlerChainContext, String arg0) {
arg0 +="責(zé)任3";
? ? ? ? System.out.println(arg0);
? ? ? ? if(handlerChainContext.next !=null){
handlerChainContext.runNext(arg0);
? ? ? ? }
}
}