責任鏈模式:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成
一條鏈,並沿著這條鏈傳遞該請求,直到乙個物件處理它為止。 ——摘自《大話設計模式》
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 ...