輕松控制java義務鏈形式。本站提示廣大學習愛好者:(輕松控制java義務鏈形式)文章只能為提供參考,不一定能成為您想要的結果。以下是輕松控制java義務鏈形式正文
界說:義務鏈形式(Chain of Responsibility Pattern)為要求創立了一個吸收者對象的鏈。這類形式賜與要求的類型,對要求的發送者和吸收者停止解耦。這類類型的設計形式屬於行動型形式。在這類形式中,平日每一個吸收者都包括對另外一個吸收者的援用。假如一個對象不克不及處置該要求,那末它會把雷同的要求傳給下一個吸收者,依此類推。
特色:1、下降耦合度。它將要求的發送者和吸收者解耦。
2、簡化了對象。使得對象不須要曉得鏈的構造。
3、加強給對象指派職責的靈巧性。經由過程轉變鏈內的成員或許調動它們的順序,許可靜態地新增或許刪除義務。
4、增長新的要求處置類很便利。
企業級開辟和經常使用框架中的運用:spring,struts的攔阻器,servlet的過濾器
詳細實例:
/**
*這裡以公司告假舉例:
*1、或人告假(事宜)
*2、項目組長審批:小於三天可以審批,年夜於三天請示下級
*3、部分主管審批:小於十天可以審批,年夜於十天請示下級
*4、總司理審批 :小於30天可以審批,年夜於30天不同意
*/
public class Demo {
public static void main(String[] args) {
Event event = new Event("法式員", 32, "回老家投親");
Leader a = new GroupLeader("張三");
Leader b = new Manager("李四");
Leader c = new GeneralManager("王五");
//指定義務鏈形式
a.setNextLeader(b);
b.setNextLeader(c);
a.handler(event);
}
}
/**
* 事宜對象,義務鏈中的詳細處置事宜
* 該實例中即為告假這件事兒
*/
class Event{
private String name;
private int days;
private String reason;
public Event(String name, int days, String reason) {
super();
this.name = name;
this.days = days;
this.reason = reason;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDays() {
return days;
}
public void setDays(int days) {
this.days = days;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
/**
* 籠統義務鏈對象,前面的一切現實義務鏈對象繼續自該對象
*/
abstract class Leader{
private String name;
protected Leader nextLeader;//義務鏈中的下一個義務對象,這是讓義務鏈連續下去的基本
public Leader(String name) {
super();
this.name = name;
}
public void setNextLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected abstract void handler(Event event);
}
/**
* 告假流程中的第一個對象,組長
*/
class GroupLeader extends Leader{
public GroupLeader(String name) {
super(name);
}
protected void handler(Event event) {
if(event.getDays() < 3){
System.out.println("--------------------告假條--------------------");
System.out.print("| 告假人:"+event.getName()+" | ");
System.out.println("告假天數:"+event.getDays()+"天"+" |");
System.out.println("| 告假緣由:"+event.getReason() + " |");
System.out.println("審批人:"+this.getName()+"(組長),經由過程!");
System.out.println();
}else{
System.out.println(this.getName()+"(主管),沒有權限!");
this.nextLeader.handler(event);
}
}
}
/**
* 告假流程中的第二個對象,部分主管
*/
class Manager extends Leader{
public Manager(String name) {
super(name);
}
protected void handler(Event event) {
if(event.getDays() < 10){
System.out.println("--------------------告假條--------------------");
System.out.print("| 告假人:"+event.getName()+" | ");
System.out.println("告假天數:"+event.getDays()+"天"+" |");
System.out.println("| 告假緣由:"+event.getReason() + " |");
System.out.println("審批人:"+this.getName()+"(主管),告假經由過程!");
System.out.println();
}else{
System.out.println(this.getName()+"(總司理),沒有權限!");
this.nextLeader.handler(event);
}
}
}
/**
* 告假流程中的第三個對象,總司理
*/
class GeneralManager extends Leader{
public GeneralManager(String name) {
super(name);
}
protected void handler(Event event) {
if(event.getDays() < 30){
System.out.println("--------------------告假條--------------------");
System.out.print("| 告假人:"+event.getName()+" | ");
System.out.println("告假天數:"+event.getDays()+"天"+" |");
System.out.println("| 告假緣由:"+event.getReason() + " |");
System.out.println("審批人:"+this.getName()+"(總司理)");
System.out.println();
}else{
System.out.println("--------------------告假條--------------------");
System.out.print("| 告假人:"+event.getName()+" | ");
System.out.println("告假天數:"+event.getDays()+"天"+" |");
System.out.println("| 告假緣由:"+event.getReason() + " |");
System.out.println("審批人:"+this.getName()+"(總司理),告假人欠亨過!");
System.out.println();
}
}
}
義務鏈形式重要用於流程掌握這一類的開辟,比擬較於純真用if-else形式,在代碼修正和整合上有更高的效力,更利於代碼保護。並且,須要增長義務鏈中的對象時,須要在再完成一個詳細的義務鏈類,然後創立義務對象,並保護義務鏈關系就行,不須要更年夜的開支,並且在現實設計中,我們許多時刻義務鏈的保護都在設置裝備擺設文件中停止,如許我們將節儉更多的開辟時光。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。