/************************************************************************************************** |
責任鏈: 解除請求的發送者和接收者之間的耦合,而使多個對象有機會處理這個請求。將這些請求連成一個鏈,並沿着這條鏈傳遞該請求,直到有個對象處理它(諸多對象由每一個對象對其下家的引用而接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。客戶並不知道鏈上的哪一個對象最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者有兩個選擇:承擔責任或者把責任推給下家。一個請求可以最終不被任何接收端對象所接受)。
§ 場景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、 每個商戶設置的時間點不固定
通過鏈接的方式完成不同過則的自動匹配與處理較佳!
§ 總結
除了以上顯示的設置鏈條的節點外,還可採用隱式的方式實現鏈條節點的自動切換。(也即通過提供統一的抽象方法或接口,實現獲取下一個鏈節點接收對象,在內部完成鏈節點的切換),另外,針對策略的不同情況,適當時候我們還可以增加針對策略的接口,提供策略可執行判斷、不同策略待驗證項等等。