常用設計模式總結--責任鏈模式

常用設計模式總結--責任鏈模式

在多線程的編程模型中,責任鏈模式是一種常用的模式,責任鏈模式可以將一個任務分解成小的獨立的任務單元,讓整個任務一目瞭然。

以一個爬蟲爬取某個頁面爲例,假設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);
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章