十七 責任鏈模式

2021-09-30 10:16:16 字數 2217 閱讀 2059

責任鏈模式:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成

一條鏈,並沿著這條鏈傳遞該請求,直到乙個物件處理它為止。 ——摘自《大話設計模式》

ps:責任處理類都有各自的負責區塊,以聚合的方式連成整個的責任鏈條。

基本結構如下:

①、request 請求

②、handler 處理者的超類

handler 自身的引用,由該屬性連線鏈條

handlerequest(request request) 處理請求的方法,該方法用於子類覆寫

③、concretehandler 具體的處理者,繼承 handler

handlerequest(request request) 覆寫超類的處理方法,

內有「區塊判斷」,本類只處理自己該負責的部分,區塊之外的請求會被傳遞

示例**:以員工要求請假、加薪,經理們進行審批為例

①、request #########################################

/**

* 請求

*/public class request

public string gettype()

public void settype(string type)

public string getcontent()

public void setcontent(string content)

public int getnumber()

public void setnumber(int number)

}

②、handler #########################################

/**

* 管理者

*/public abstract class manager

public void setmanager(manager manager)

public string getname()

public void setname(string name)

public manager getmanager()

}

③、concretehandler #########################################

/**

* 經理,可處理3天以內的假期請求

*/public class commonmanager extends manager

@override

if("請假".equals(request.gettype()) && request.getnumber()<=3)else if(request!=null)

}}

/**

* 總監,可處理6天以內的假期請求

*/public class majormanager extends manager

@override

if("請假".equals(request.gettype()) && request.getnumber()<=6)else if(request!=null)

}}

/**

* 總經理, 可處理任意天數的假期請求和薪水調整請求

*/public class generalmanager extends manager

@override

if("請假".equals(request.gettype()))else if("加薪".equals(request.gettype()) && request.getnumber()<=500)else if("加薪".equals(request.gettype()) && request.getnumber()>500)

}}

測試方法:

public class test 

}

執行結果:

歐陽經理:duke要請假,天數:2 被批准

司馬總監:duke要請假,天數:5 被批准

夏侯總經理:duke要請假,天數:8 被批准

夏侯總經理:duke要加薪,500元 被批准

夏侯總經理:duke要加薪,1000元 再說吧

C 設計模式(十七)責任鏈模式

從生活中的例子可以發現,某個請求可能需要幾個人的審批,即使技術經理審批完了,還需要上一級的審批。這樣的例子,還有公司中的請假,少於3天的,直屬leader就可以批准,3天到7天之內就需要專案經理批准,多餘7天的就需要技術總監的批准了。介紹了這麼多生活中責任鏈模式的例子的,下面具體給出物件導向中責任鏈...

責任鏈模式

責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...

責任鏈模式

有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...