設計模式學習筆記四:責任鏈模式

責任鏈模式:Responsibility Of Chain,簡稱RoC。鏈式結構,由多個結點組成,具備依次向下傳遞的特性,到達每個結點可以選擇做處理或向下傳遞。

每個結點可以設計爲獨立的功能單元,好處就是實現瞭解耦。設計好傳遞條件,即可清除在哪個結點做什麼,出問題去哪裏修改。

 

我簡單畫了一個時序圖,不大標準,希望能清晰表達意思。

x.a 和x.b代表if…else邏輯。



下面用一個例子供參考,背景是我之前想實現一個表達式解析工具,打算使用責任鏈來實現每個單元的處理邏輯。後來發現有了ANTLR類庫可以直接生成就沒有繼續實現,有興趣的朋友可以關注下,此是題外話。

/*  
 * ResponsibilityOfChain.java 1.0 2014/08/11  
 *   
 * 聲明:歡迎轉載,請註明出處。  
 *   
 */ 

package com.array7.roc;

public interface IBaseChain {
	public void execute(IBaseChain chain);
}

package com.array7.roc;

import java.util.ArrayList;
import java.util.List;

public class BaseChain implements IBaseChain {
	List<IBaseChain> chains = new ArrayList<IBaseChain>();  
	int index = 0;
	public void execute(IBaseChain chain) {
		if (index == chains.size()) {
			System.out.println("arrived end!");
			return;
		}
		IBaseChain nextChain = chains.get(index);
		index ++;
		nextChain.execute(chain);
	}
	public BaseChain set(IBaseChain chain) {
		this.chains.add(chain);
		return this;
	}
	
	public static void main(String[] args) {
		BaseChain chain = new BaseChain().set(new SecondNode()).set(new MinuteNode()).set(new HourNode());
		chain.execute(chain);
	}
}

package com.array7.roc;

public class HourNode implements IBaseChain {

	public void execute(IBaseChain chain) {
		System.out.println("HourNode Chain...");
		chain.execute(chain);
	}

}

package com.array7.roc;

public class MinuteNode implements IBaseChain {

	public void execute(IBaseChain chain) {
		System.out.println("MinuteNode Chain...");
		chain.execute(chain);
	}

}


package com.array7.roc;

public class SecondNode implements IBaseChain {

	public void execute(IBaseChain chain) {
		System.out.println("Second Chain...");
		chain.execute(chain);
	}

}



發佈了44 篇原創文章 · 獲贊 13 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章