職責鏈模式

2021-07-27 11:04:45 字數 2703 閱讀 5548

職責鏈模式:使多個物件有機會處理請求,從而避免請求的傳送者和接收者之間的耦合。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。

即用類來處理請求的乙個分支,並將下個分支的處理傳遞到下個類來處理。這樣就將請求的不同分支情況切割為各個類來管理,解耦。

先建立乙個請求,它儲存的是我們條件判斷要用的資訊,就是if else對應需要資訊。

public

class request

public string getrequesttype()

public

void

setrequestcontent(string requestcontent)

public string getrequestcontent()

public

void

setnumber(int number)

public

intgetnumber()

}

然後建立乙個管理類,它是乙個介面,定義了設定下乙個類的方法,和乙個處理請求的虛函式。

我的理解是,這個類就是將每個類鏈結起來的介面,由於所有職責鏈上的類都要實現這個類中的處理函式,並且除了最後乙個類都需要設定下個是哪個類來處理請求,就將所有繼承它的類都鏈結了起來。

管理介面:

public

abstract

class manager

public

void

setsuperior(manager superior)

public

abstract

void

}

具體類

public

class

commonmanager

extends

manager

@override

public

void

if ("請假" == request.getrequesttype() && request.getnumber() <= 2)

else }}

}

public

class

majordomo

extends

manager

@override

public

void

if ("請假" == request.getrequesttype() && request.getnumber() <= 5)

else }}

}

public

class

generalmanager

extends

manager

@override

public

void

if("請假" == request.getrequesttype())

else

if("加薪" == request.getrequesttype() && request.getnumber() <= 500)

else

if("加薪" == request.getrequesttype() && request.getnumber() > 500)

}}

有客戶端來設定職責鏈中每個類的訪問循序:

commonmanager jinli = new commonmanager("經理");

majordomo zongjian = new majordomo("總監");

generalmanager zongjianli = new generalmanager("總經理");

//設定訪問循序

jinli.setsuperior(zongjian);

zongjian.setsuperior(zongjianli);

request request = new request();

request.setrequesttype("請假");

request.setrequestcontent("小明請假");

request.setnumber(1);

request request1 = new request();

request1.setrequesttype("請假");

request1.setrequestcontent("小李請假");

request1.setnumber(5);

request request2 = new request();

request2.setrequesttype("加薪");

request2.setrequestcontent("小紅請求加薪");

request2.setnumber(500);

request request3 = new request();

request3.setrequesttype("加薪");

request3.setrequestcontent("小張請求加薪");

request3.setnumber(1000);

可以看到,有了職責鏈以後就不需要在改需求的時候去看那麼多的if else都揉在乙個函式裡的**了。只需要相應修改對應類就可以了。

職責鏈模式

1.職責鏈 namespace dutychainpattern 用來處理請求 public abstract void transmitrequest int request 班主任 職責鏈上的乙個節點,在裡面進行判斷,看能否處理請求,不能則將請求轉移 public class classadvi...

職責鏈模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

職責鏈模式

劇情簡要 學習此模式,讓筆者聯想到自然界的生物鏈。打個比方 大魚吃小魚,小魚吃蝦公尺。河裡的小蝦公尺問大魚,你要不要吃我啊?大魚說 你太小了,吃了 沒吃,return 懶得吃!然後蝦公尺又問小魚 小螃蟹 小河馬同樣的問題。其實如果小蝦公尺這麼想自我了結的話,根本不用這麼費勁。這就開始了我們職責鏈模式...