常用設計模式總結--責任鏈模式
在多線程的編程模型中,責任鏈模式是一種常用的模式,責任鏈模式可以將一個任務分解成小的獨立的任務單元,讓整個任務一目瞭然。
以一個爬蟲爬取某個頁面爲例,假設url的調度不是有爬蟲來管理,而是有專門的urldb模塊來實現,那麼一個網頁的爬取可以分解爲以下幾個小的子任務。下載網頁;解析網頁;將當前頁面新發現的鏈接寫回urldb。將任務分解成小任務以後,每個小任務的輸出就是下一個任務的輸入,整個框架就可以清晰明瞭。輔助於log的信息,在出現問題的時候很容易查找問題出現的地方
廢話少說,直接看代碼吧
Processor.java
public abstract class Processor {
private Processor next;
protected int delta;
public abstract int doProcess(int base);
public void setNext( Processor next ){
this.next = next;
}
public void process(int base){
int result = doProcess(base);
if( null != next ){
next.process(result);
}
}
}
ProcessorChainFactory,負責把小的任務組合起來
package zl.study.designpattern.respchain;
public class ProcessorChainFactory {
public static Processor assembleChain( Processor ...processor){
Processor head = null;
Processor pre = null;
if( null == processor || 0 >= processor.length){
return head;
}
for(int i = 0; i< processor.length; i ++){
Processor current = processor[i];
if( i == 0){
head =current;
}
if( null != pre){
pre.setNext(current);
}
pre = current;
}
return head;
}
}
示例程序
算了一個算術題
ProcessorAdd.java 加法
package zl.study.designpattern.respchain.test;
import zl.study.designpattern.respchain.Processor;
public class ProcessorAdd extends Processor{
public ProcessorAdd(int delta){
this.delta = delta;
}
@Override
public int doProcess(int base) {
int result = base + delta;
System.out.println(result);
return result;
}
}
ProcessorSub.java 減法
package zl.study.designpattern.respchain.test;
import zl.study.designpattern.respchain.Processor;
public class ProcessorSub extends Processor{
public ProcessorSub( int delta){
this.delta = delta;
}
@Override
public int doProcess(int base) {
int result = base -delta;
System.out.println(result);
return result;
}
}
主程序
package zl.study.designpattern.respchain.test;
import zl.study.designpattern.respchain.ProcessorChainFactory;
public class RespChainTest {
public static void main(String args[]){
ProcessorAdd add = new ProcessorAdd(1);
ProcessorSub sub = new ProcessorSub(2);
ProcessorChainFactory.assembleChain(add,sub);
add.process(1);
}
}