使多個物件都有機會處理請求,從而避免請求的傳送者和接受者質檢的耦合關係。將這個接收物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理他為止。
先來看乙個反面例子**,使用大量的if
判斷來選擇執行邏輯:
public response handlerequest(request request) else if (2 == level) else if (3 == level)
throw new runtimeexception("無法處理 ......")
}
這樣的**有以下缺點:
以下是使用責任鏈模式的**:
// 抽象處理類
public abstract class handler
final response handlerequest(request request)
system.out.println("本處理器:"+gethandlerlevel()+" 無法處理,開始轉交 ......");
if(null != this.nexthandler) else
return null;
}// 自己處理的任務標識
abstract level gethandlerlevel();
// 實際處理邏輯,子類自己定義
abstract response dohandler(request request);
}// 任務標識,用於區分用哪個處理器處理
public enum level
//請求類
public class request
public level getlevel()
}// 處理結果類
public class response
// 第乙個處理器
public class firstconcretehandler extends handler
@override
response dohandler(request request)
}// 第二個處理器
public class secondconcretehandler extends handler
@override
response dohandler(request request)
}// 第三個處理器
public class thirdconcretehandler extends handler
@override
response dohandler(request request)
}//呼叫者
public class main
}
輸出結果如下:
本處理器:first_level 無法處理,開始轉交 ......
本處理器:second_level 無法處理,開始轉交 ......
本處理器:third_level 開始處理 .....
責任鏈模式其實就是乙個靈活版的if…else…
語句,只不過它把判斷條件放在每個鏈的節點類中。如覺得**中if…else…
語句使得程式可讀性不好,可以考慮責任鏈模式。 23種設計模式之責任鏈模式
責任鏈模式 chain of responsibility pattern 為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。在這種模式中,通常每個接收者都包含對另乙個接收者的引用。如果乙個物件不能處理該請求,那麼它會把相同的請...
23種設計模式之責任鏈模式
定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係.將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止 通俗的講,就是將對請求的處理組成一條鏈,當請求來時,在鏈中依次傳遞,知道找到能夠處理此請求的物件 其通用類圖如下 責任鏈模式的重點是 在 鏈 上,鏈 由...
java23種設計模式 責任鏈模式
屬於行為型模式的一種,乙個請求由多個物件來處理,這些物件形成一條鏈,請求沿著該鏈傳遞,直到該鏈上的某個物件處理它為止。desc 抽象處理者 created by tiantian on 2018 8 19 public inte ce ihandler package design.patten.c...