責任鏈模式

摘要

  本文通過簡潔的模式描述,應用場景的詳細代碼實現,以及匹配的UML,詳解介紹了責任鏈模式的原理及應用。本文可幫助讀者快速掌握責任鏈模式,以便工作學習中使用責任鏈模式。

一、責任鏈模式

  在生活中,完成一項任務往往需要幾個步驟,步驟有前後排序之分,同時一個任務的步驟是有可能發生變化的,比如增加一個步驟,減少一個步驟。
  編碼源於生活,某個任務類的一個功能也常常是由幾個步驟完成,如果將步驟寫死在任務類中,後期步驟的變化會導致修改任務類,這就違背了“開閉原則”。
  責任鏈模式就是用於解決上面的問題。首先對任務類與步驟進行解耦,讓步驟單獨封裝成類,任務類只需要知道需要哪些步驟類即可,但這也導致使用者必須清楚一個功能需要的步驟。責任鏈模式借鑑List數據結構,步驟之間用鏈式結構進行連接,步驟一的下一個是步驟二,步驟二的下一個是步驟三,依次類推。所以使用者只需要知道鏈頭即可順着鏈子執行到最後,而不用關心步驟二步驟三是什麼。

二、責任鏈模式的實現

2.1 場景設計

  在KFC中,客戶點漢堡的過程如下:
  第一步,漢堡下單
  第二步,KFC製作漢堡
  第三步,KFC前臺叫號取餐

2.2 代碼實現

2.2.1 HamburgerHandler 任務抽象類

package ft.patterns.responsibilityChain;

public abstract class HamburgerHandler {
	private HamburgerHandler nextHandler;
	
	public HamburgerHandler() {
		nextHandler = null;
	}
	
	public abstract void handler();
	
	public void nextHandler(HamburgerHandler nextHandler) {
		this.nextHandler = nextHandler;
	}
	
	public void doChain() {
		if(nextHandler != null) {
			nextHandler.handler();
		}
	}
}

2.2.2 HamburgerOder 步驟一具體類

package ft.patterns.responsibilityChain;

public class HamburgerOder extends HamburgerHandler {
	
	@Override
	public void handler() {
		System.out.println("oder hamburger is aleardy.");
		super.doChain();
	}
}

2.2.3 HamburgerBuild 步驟二具體類

package ft.patterns.responsibilityChain;

public class HamburgerBuild extends HamburgerHandler{
	@Override
	public void handler() {
		System.out.println("Build hamburger is aleady");
		super.doChain();
	}
}

2.2.4 HamburgerCalling 步驟三具體類

package ft.patterns.responsibilityChain;

public class HamburgerCalling extends HamburgerHandler{

	@Override
	public void handler() {
		System.out.println("Hamburger is calling client");
		super.doChain();
	}
}

2.2.5 Main 測試類

package ft.patterns.responsibilityChain;

public class Main {
	public static void main(String[] args) {
		HamburgerHandler oder = new HamburgerOder();
		HamburgerHandler build = new HamburgerBuild();
		HamburgerHandler calling = new HamburgerCalling();
		
		oder.nextHandler(build);
		build.nextHandler(calling);
		
		oder.handler();
	}
}

2.2.6 測試結果

oder hamburger is aleardy.
Build hamburger is aleady
Hamburger is calling client

三、責任鏈模式的UML圖

責任鏈模式UML類圖

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