23種設計模式 13 責任鏈模式

2022-03-09 23:48:06 字數 1723 閱讀 3042

使多個物件都有機會處理請求,從而避免請求的傳送者和接受者質檢的耦合關係。將這個接收物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理他為止。

先來看乙個反面例子**,使用大量的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...