我的理解是:將請求處理者按鏈式排列,當傳送乙個請求時,請求會由鏈式入口訪問,直到找到可以處理它的處理者為止。
比如:對於公司的報銷流程,當報銷金額 < 1000 需要向組長申請;1000 < 5000需要向部門負責人申請; > 5000 則需要向總監申請。依次向上申請,且不能越級處理。如果申請金額為4000,則先開始向組長申請,然後組長向上申請到部門負責人,部門負責人處理請求,結束。
先定義乙個請求處理抽象類
/**
* 請求處理抽象類
* @author sunyan
* */
public abstract class handler
return true;
}else
// }else
// }
} //申請處理方法
}
然後定義 組長實現類
/**
* 組長類
* @author sunyan
* */
public class groupleader extends handler
@override
// todo auto-generated method stub
system.out.println("我是組長,這事我可以處理");
}}
接著定義 部門負責人實現類
/**
* 部門負責人
* @author sunyan
* */
public class departmentleader extends handler
@override
// todo auto-generated method stub
system.out.println("我是部門負責人,這事我可以處理");
}}
再定義 總監實現類
/**
* 總監
* @author sunyan
* */
public class director extends handler
@override
// todo auto-generated method stub
system.out.println("我是總監,這事我可以處理");
}}
接著定義 申請處理介面類
public inte***ce chain
申請責任鏈實現類
public class handlerchain implements chain
@override
// todo auto-generated method stub
for(handler handler : handlers)
} }}
定義 請求類
/**
* 申請類
* @author sunyan
* */
public int mpricenum;
public int mlevel;
this.mpricenum = pricenum;
this.mlevel = level;
}}
最後來看如何呼叫
/**
* 責任鏈模式:將請求處理者按鏈式排列,當傳送乙個請求時,請求會由鏈式入口訪問,直到找到可以處理它的處理者為止。
* eg:公司報銷流程,當報銷金額 < 1000 需要向組長申請;1000 < 5000需要向部門負責人申請; > 5000 則需要向總監申請。
* 依次向上申請,不能越級處理。
* * @author sunyan
* */
public class chaintest01
}
執行結果如下
可以看到,我們發起的申請最終交由總監處理。
我的Java設計模式 責任鏈模式
今天來說說程式設計師小猿和產品就關於需求發生的故事。前不久,小猿收到了產品的需求。產品經理 小猿,為了迎合大眾屌絲使用者的口味,我們要放一張圖,要 的。小猿 你大爺的,讓身為正義與純潔化身的我做這種需求,還 產品經理 誤會誤會,是放一張暴露一點點的,尺寸不大。小猿 尼瑪 能說清楚些嗎,需求模稜兩可的...
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...