《設計模式 ● 責任鏈》之業務場景

/**************************************************************************************************
** 模式的初衷,無非是爲我們經常出現問題的業務邏輯或系統結構提供好的解決方案,不論
** 是高層的還是較低層次的;而應用模式的主要工作則是模式識別,能將單一或複合的模式
** 結合項目自身的業務特性放在適當的場景中,則需要努力追求和不斷積累。
************************************************************************************************/

 

       責任鏈: 解除請求的發送者和接收者之間的耦合,而使多個對象有機會處理這個請求。將這些請求連成一個鏈,並沿着這條鏈傳遞該請求,直到有個對象處理它(諸多對象由每一個對象對其下家的引用而接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。客戶並不知道鏈上的哪一個對象最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者有兩個選擇:承擔責任或者把責任推給下家。一個請求可以最終不被任何接收端對象所接受)。

§ 場景1

       手機平臺系統常有提供對手機日程、電話、短信、通話記錄等信息的備份,通常應用平臺會提供可選擇備份項的UI給用戶,變化部分主要有以下幾點:

1、 系統增加或刪除備份項目

2、 用戶可選擇備份、還原項不固定,致使應用無法良性的判斷該執行哪些備份


代碼示例:

http://download.csdn.net/download/webwalker/7470265

		//create handler instance
		BaseHandler h1 = new AgendaHandler();
		BaseHandler h2 = new CallHandler();
		BaseHandler h3 = new PhoneHandler();
		BaseHandler h4 = new SmsHandler();		
		//set next chain node
		h1.SetSuccessor(h2);
		h2.SetSuccessor(h3);
		h3.equals(h4);
		
		//process request
		List<String> checkedList = this.GetCheckedListItem();		
		h1.Handle(checkedList);



 


§ 場景2

類似Work flow中面向流程性的處理方案也是一個很好的選擇,關於WF這裏不在贅述。在面向這種流程性事務處理過程中,簡單的說就是你有很多業務,這些業務都有各自的業務處理流程,且這些流程有很多相同的事務處理邏輯,則大可通過將每個主要的業務流程作爲一個處理Step、一個鏈節點,通過配置鏈節點的先後順序,來完成一系列業務邏輯的執行過程。而各個節點或事務step可通過上下文實現數據共享與串聯(對鏈中各環節存有共性、異性的地方進行變化封裝,而後與主鏈進行銜接)。

 

§ 場景3

       增值業務中,常有提供規則設置UI給使用者,以便使用者可以委託付款週期、自動充值(按天、按周、按月、按年、按小時)、自動提現等,當然每部分需採用不同的算法策略。在此基礎上,主要的變化部分如下:

1、 每個商戶可設置的規則類型不固定

2、 每個商戶可設置的規則個數不固定

3、 每個商戶設置的時間點不固定

通過鏈接的方式完成不同過則的自動匹配與處理較佳!

 

§ 總結

       除了以上顯示的設置鏈條的節點外,還可採用隱式的方式實現鏈條節點的自動切換。(也即通過提供統一的抽象方法或接口,實現獲取下一個鏈節點接收對象,在內部完成鏈節點的切換),另外,針對策略的不同情況,適當時候我們還可以增加針對策略的接口,提供策略可執行判斷、不同策略待驗證項等等。


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