責任鏈模式是一種行為設計模式之一。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。
責任鏈模式涉及到的角色如下所示:
/**
*@author liuml
*@explain 抽象責任鏈
*@time 2018/8/6 20:37
*/public
abstract
class
handlerchain
public
abstract
void
requext(int request);
}
/**
*@author liuml
*@explain 具體責任鏈一
*@time 2018/8/7 11:23
*/public
class
concrethandler1
extends
handlerchain else
}}
/**
*@author liuml
*@explain 具體責任鏈2
*@time 2018/8/7 11:23
*/public
class
concrethandler2
extends
handlerchain else
}}
public
class main ;
for (int request : requests)
}}
我是責任鏈第一級 我處理了請求1
請求10沒人能夠處理
我是責任鏈第二級 我處理了請求23
我是責任鏈第二級 我處理了請求40
舉乙個實際的例子. 在android開發中, 如果使用者有可能有不同角色, 並且每個角色限可以進入不同的模組 一般情況下怎麼做?
比如 role 的值 為 1 2 3 代表3個段位, 倔強青銅, 璀璨**, 榮耀**.
下面這個模組只能 **以上段位才能進入 一般都這麼做
if(role==2||role==3)else
//或者
if(role>=2)else
或者需要每個許可權對應每個模組做出某種操作
if(role ==1 )else
if(role == 2)else
也可能7個段位 我這裡就先寫三個
//華貴鉑金, 璀璨鑽石, 超凡大師 , 最強王者 (我的lol很久沒玩了)
使用責任鏈模式,
改造下 上面的**
/**
*@author liuml
*@explain 抽象責任鏈
*@time 2018/8/6 20:37
*/public
abstract
class
handlerchain
public
abstract
boolean
requext(int request);
}/**
*@author liuml
*@explain 不屈青銅
*@time 2018/8/7 11:23
*/public
class
concrethandler1
extends
handlerchain else
}}/**
*@author liuml
*@explain 璀璨**
*@time 2018/8/7 11:23
*/public
class
concrethandler2
extends
handlerchain else
}}/**
*@author liuml
*@explain 榮耀**
*@time 2018/8/7 11:23
*/public
class
concrethandler3
extends
handlerchain else
}}//常量 當前的許可權
public
class
constant
/** *@author liuml
*@explain
*@time 2018/8/7 16:53
*/public
class
handlerchainstaticfactory
public
static concrethandler2 createtwo()
public
static concrethandler3 createthree()
}/**
*@author liuml
*@explain 靜態內部類單例
*@time 2018/8/7 16:55
*/public
class
handlerchainutil
public
static handlerchainutil getinstance()
public
static
boolean
request(int request)
public
static
class
handlerchainutilholder
}public
class
main
}
最後列印:
璀璨** 處理了請求2
測試是否有許可權: true
璀璨** 處理了請求1
測試是否有許可權: true
當前許可權 2, 請求3沒人能夠處理
測試是否有許可權: false
當前許可權 2, 請求4沒人能夠處理
測試是否有許可權: false
責任鏈模式的適用場景
就像上面的例子那樣,假如使用if…else…語句來組織乙個責任鏈時感到力不從心,**看上去很糟糕時,就可以使用責任鏈模式來進行重構。
另外:
==有序廣播也可以實現責任鏈模式==開源框架 okhttp 責任鏈模式的使用
Android 設計模式 筆記 責任鏈模式
介紹 我們把多個節點首尾相連所構成的模型稱之為鏈,對於鏈每個節點都可以拆開再連線,因此鏈式結構具有很好的靈活性。程式設計時候,我們這一結果應用於程式設計,把每乙個節點看做乙個物件,每乙個物件擁有不同的處理邏輯,當乙個請求從鏈式的首端發出。沿著鏈的路徑一次傳遞給每乙個節點物件,直至有物件處理這個請求位...
責任鏈模式
責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...
責任鏈模式
有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...