我們以生活中的乙個示例來說明職責鏈模式的使用。
假設某天你要結婚了,結婚之前那必然得先去婚紗店裡預定拍婚紗照吧,一般人都會盡可能要求銷售人員能多給一些精修之後的**,但是銷售人員可能有很多級別,比如經理,總監,總經理等級別,他們之間能開口答應給多少張精修**的許可權並不一樣,當然總經理肯定是最有說話權的。我們客戶提出要求,然後不同等級銷售人員看能否答應我們的需求,不能答應就找上級領導去。
【a】uml類圖
詳細**如下:
【b】精修**請求類
package com.wsh.springboot.springbootdesignpattern.responsibilitychainpattern;
/** * @description: 精修**請求類
* @author: weishihuai
* @date: 2019/11/26 15:29
*/public class photorequest
public void settype(string type)
public integer getphotonum()
public void setphotonum(integer photonum)
public photorequest(string type, integer photonum)
}
/**
* @description: 抽象請求接收者
* @author: weishihuai
* @date: 2019/11/26 15:30
*/public abstract class irequesthandler
/*** 設定下乙個請求接收者
** @param nexthandler 下乙個請求接收者
*/public void setnexthandler(irequesthandler nexthandler)
/*** 請求處理的方法
** @param request 請求物件
*/protected abstract void handle(photorequest request);
}
【d】具體請求接收者:這裡定義了三個不同等級的銷售人員代表不同的請求接收者
/**
* @description: 銷售經理
* @author: weishihuai
* @date: 2019/11/26 15:34
*/public class salesmanager extends irequesthandler else else }}
}/**
* @description: 銷售總監
* @author: weishihuai
* @date: 2019/11/26 15:34
*/public class salesdirector extends irequesthandler else else }}
}/**
* @description: 總經理
* @author: weishihuai
* @date: 2019/11/26 15:34
*/public class generalmanager extends irequesthandler else else }}
}
【e】客戶端
public class client
}
【f】 執行結果
可見,根據不同的請求,將會找到不同的具體請求接收者去處理,如果當前接收者不能處理,則繼續往下找下乙個能處理請求的接收者,如果到最後都找不到,則丟擲不能處理異常,這就是職責鏈模式。
設計模式之職責鏈模式
如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...
設計模式之職責鏈模式
職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...
設計模式之職責鏈模式
職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...