设计模式(24)-----责任链模式
責(zé)任鏈模式(chain of responsibility)
定義
責(zé)任鏈模式是對(duì)象的行為模式。使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者直接的耦合關(guān)系。將這些對(duì)象連成一條鏈,沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止。
UML類(lèi)圖
角色
抽象處理者(Handler)角色?:定義一個(gè)請(qǐng)求的接口。如果需要可以定義個(gè)一個(gè)方法用來(lái)設(shè)定和返回下家對(duì)象的引用。 具體處理者(ConcreteHandler)角色?:如果可以處理就處理請(qǐng)求,如果不能處理,就把請(qǐng)求傳給下家,讓下家處理。也就是說(shuō)它處理自己能處理的請(qǐng)求且可以訪問(wèn)它的下家。例子
有人想請(qǐng)假,小組長(zhǎng)只能審批小于等于1天的假期,項(xiàng)目經(jīng)理可以審批小于等于3天的假期,CEO可以審批所有的假期。
Handler
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: Handler.java * @Description: 審批請(qǐng)假抽象類(lèi)* @author: Han * @date: 2016年6月29日 下午6:05:46 */ public abstract class Handler {protected Handler handler;public Handler getHandler() {return handler;}public void setHandler(Handler handler) {this.handler = handler;}//審批方法public abstract void approve(int day); }GroupLeader(小組長(zhǎng))
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: GroupLeader.java * @Description: 小組長(zhǎng),能審批的是小于等于1天的請(qǐng)假申請(qǐng) * @author: Han * @date: 2016年6月29日 下午5:58:29 */ public class GroupLeader extends Handler {@Overridepublic void approve(int day) {if(day <= 1) {System.out.println("小組長(zhǎng)審批");} else {System.out.println("超過(guò)了小組長(zhǎng)權(quán)限,移交上級(jí)");this.getHandler().approve(day);}} }ProjectManager(項(xiàng)目經(jīng)理)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 項(xiàng)目經(jīng)理,能審批的是小于等于3天的請(qǐng)假* @author: Han * @date: 2016年6月29日 下午6:01:49 */ public class ProjectManager extends Handler {@Overridepublic void approve(int day) {if(day <= 3) {System.out.println("項(xiàng)目經(jīng)理審批");} else {System.out.println("超過(guò)了項(xiàng)目經(jīng)理權(quán)限,移交上級(jí)");getHandler().approve(day);}} }CEO
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: CEO.java * @Description: 最后移交到CEO審批* @author: Han * @date: 2016年6月29日 下午6:03:59 */ public class CEO extends Handler {@Overridepublic void approve(int day) {System.out.println("CEO審批");} }客戶(hù)端
package com.csdhsm.designpattem.chainofresponsibility;public class Solution {public static void main(String[] args) {Handler leader = new GroupLeader();Handler manager = new ProjectManager();Handler ceo = new CEO();//把Handler連成一條鏈 leader.setHandler(manager);manager.setHandler(ceo);//處理請(qǐng)求leader.approve(6);} }結(jié)果
OK,成功!
總結(jié)
優(yōu)點(diǎn)
調(diào)用者不需知道具體誰(shuí)來(lái)處理請(qǐng)求,也不知道鏈的具體結(jié)構(gòu),降低了節(jié)點(diǎn)域節(jié)點(diǎn)的耦合度;可在運(yùn)行時(shí)動(dòng)態(tài)修改鏈中的對(duì)象職責(zé),增強(qiáng)了給對(duì)象指派職責(zé)的靈活性。
缺點(diǎn)
沒(méi)有明確的接收者,可能傳到鏈的最后,也沒(méi)得到正確的處理。
轉(zhuǎn)載于:https://www.cnblogs.com/a294098789/p/5627861.html
總結(jié)
以上是生活随笔為你收集整理的设计模式(24)-----责任链模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 14.04 安装Visua
- 下一篇: java 解析并生成 XML