設計模式之職責鏈模式

2021-10-01 04:01:53 字數 2029 閱讀 9695

我們以生活中的乙個示例來說明職責鏈模式的使用。

假設某天你要結婚了,結婚之前那必然得先去婚紗店裡預定拍婚紗照吧,一般人都會盡可能要求銷售人員能多給一些精修之後的**,但是銷售人員可能有很多級別,比如經理,總監,總經理等級別,他們之間能開口答應給多少張精修**的許可權並不一樣,當然總經理肯定是最有說話權的。我們客戶提出要求,然後不同等級銷售人員看能否答應我們的需求,不能答應就找上級領導去。

【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 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...