天天看點

Java設計模式-責任鍊模式定義優缺點實作

最近學習到設計模式,現總結個人學習備責任鍊模式内容【注重的是每一個對象對其下個對象的引用】。

上一篇:Java設計模式-備忘錄模式

文章目錄

  • 定義
  • 優缺點
    • 優點
    • 缺點
  • 實作
    • 代碼
    • 測試

定義

對象由每一個對象對其下家的引用而連接配接起來形成一條鍊,即責任鍊。職責鍊上的處理者負責處理請求,客戶隻需要将請求發送到職責鍊上即可,無須關心請求的處理細節和請求的傳遞,是以職責鍊将請求的發送者和請求的處理者解耦了。

優缺點

優點

  • 簡化了對象。使得對象不需要知道鍊的結構。【鍊中的每一個節點不需要知道其他節點的内部形态】
  • 增強給對象指派職責的靈活性。通過改變鍊内的成員或者調動它們的次序,允許動态地新增或者删除責任。
  • 增加新的請求處理類很友善。【鍊條上添加節點,僅處理自己的邏輯即可】

缺點

  • 不能保證請求一定被接收。【每一個節點負責行為,可能一個類的行為出錯整個鍊條崩潰】
  • 系統性能将受到一定影響,而且在進行代碼調試時不太友善,可能會造成循環調用。

實作

代碼

Java設計模式-責任鍊模式定義優缺點實作

角色:

  • 鍊條節點抽象類:定義了抽象行為,以及定義了存放鍊的下一個節點的引用【類似指針指向下一個節點】。
  • 具體節點:對抽象行為的實作。
/**鍊條節點的抽象類
 * 鍊的關鍵記錄鍊的下一個人,以及執行鍊的行為
 * @author cc百川
 */
public abstract class Chain {
	Chain nextnode;//存儲下一個節點
	String nodename;//節點名稱
	public Chain( String nodename) { 
		this.nodename = nodename;
	}
	public  Chain setNextNode(Chain nextnode) {
		this.nextnode = nextnode;
		return this;
	}
	public abstract void doChain(User user);

} 
/** 鄉村遊醫 【假定級别】
 * @author cc百川
 */
class VillageDoctor extends Chain{ 
	public VillageDoctor(String appname) {super( appname);}
	@Override
	public void doChain(User user) {
		if(user.grade <= 1) {
			System.out.println(this.nodename+"鑒定【"+user.username+"】 體溫正常級别無需吃藥。");
		} else if(user.grade >=2 && user.grade <5) {
			System.out.println(this.nodename+"鑒定【"+user.username+"】 屬于普通發燒,吃一些處方藥即可。");
		} else {
			nextnode.doChain(user);
		}
	}
}
/** 名醫【假定高于遊醫】
 * @author cc百川
 */
class FamousDoctor  extends Chain{ 
	public FamousDoctor(String appname) {super( appname);}
	@Override
	public void doChain(User user) {
		 if  (user.grade >=5 && user.grade <8) {
			System.out.println(this.nodename+"鑒定【"+user.username+"】 屬于普通流感,住院治療即可。");
		} else {
			nextnode.doChain(user);
		}
	}
}
/** 宮廷名醫【假定高于名醫】
 * @author cc百川
 */
class CourtDoctor extends Chain{ 
	public CourtDoctor(  String appname) {super( appname); }
	@Override
	public void doChain(User user) {
		 if  (user.grade >=8 && user.grade <=10) {
			System.out.println(this.nodename+"鑒定【"+user.username+"】 屬于病毒性流感,需要隔離觀察。");
		} else {
			nextnode.doChain(user);
		}
	}
}
           

測試

public class Test {
	public static void main(String[] args) {
		CourtDoctor thosp = new CourtDoctor("宮廷禦醫雲中君");
		FamousDoctor shosp = new FamousDoctor("端木蓉名醫");
		VillageDoctor chosp = new VillageDoctor("道家遊醫逍遙子");
		chosp.setNextNode(shosp);
		shosp.setNextNode(thosp);
		thosp.setNextNode(chosp);
		
		chosp.doChain(new User("韓非", 2));
		chosp.doChain(new User("鬼谷子", 7));
		chosp.doChain(new User("雪女", 8));
	}
}
           
Java設計模式-責任鍊模式定義優缺點實作

責任鍊模式,重點在于每一個對象對其下個對象的引用,進而僅鍊式處理。

以上僅為個人學習,如果錯誤望指出,謝謝。

繼續閱讀