Java的責任鏈模式

2021-09-19 03:27:30 字數 2909 閱讀 8296

1.責任鏈模式是一種物件的行為模式。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。

2.結構圖:

執行流程圖:

參考:3.先看乙個字串過濾的例子:

3.1定義請求和響應類:

public class request 

public void setrequest(string request)

}public class response

public void setresponse(string response)

}

3.2再定義乙個過濾的介面filter

public inte***ce filter
3.3filterchain是乙個實現了filter介面的鏈條物件

//過濾鏈條

public class filterchain implements filter

public void dofilter(request request,response response,filterchain chain)

//每新增乙個過濾規則,index自增1

filter f=filters.get(index);

index++;

//根據索引值獲取對應的規律規則對字串進行處理

f.dofilter(request, response, chain);}}

它裡面維護了乙個list列表;專門用來儲存各種過濾器;然後從list中取出過濾器並呼叫他們的過濾方法來實現不同的過濾業務。

3.4定義三個不同的過濾器,他們也實現了filter介面;並實現真正的過濾業務

//處理字串中的html標記

public class htmlfilter implements filter

}//定義的過濾敏感字眼的過濾規則

public class sensitivefilter implements filter

}//定義facefilter

public class facefilter implements filter

}

3.5呼叫

public static void main(string args)
看一下列印結果:

可以看到,請求時,是按照----htmlfilter() ---sensitivefilter()----facefilter()來執行的;返回結果是按照倒敘執行的;主要是因為返回結果的列印語句是在呼叫了chain.dofilter(request, response, chain)之後。

其實這就是雙向責任鏈的簡單使用;okhttp的底層就是使用了這種責任鏈的方式;可以在網路請求之前、之後分別做一些自己想做的事情。

4.單向的責任鏈

4.1定義過濾器的抽象類

public abstract class filter 

public string dofilter(string str)else

}abstract string handle(string str);

}

類中在dofilter方法中,首先呼叫了自己的handle方法,這是乙個抽象方法,由具體子類實現;然後判斷有沒有給自己設定下乙個過濾器;如果有,就呼叫下乙個過濾器的過濾方法。

4.2看一下三個過濾器

public class htmlfilter extends filter 

}public class sensitivefilter extends filter

}public class facefilter extends filter

}

它們的邏輯非常簡單,只專注於處理自己的過濾邏輯即可;

4.3呼叫:

public static void main(string args)
把三個過濾器物件例項化;然後,把第二個設定給第乙個,把第三個設定給第二個;這樣就組成了乙個鏈條;只需要呼叫第乙個的dofilter方法即可;

看看結果:

和上面的雙向鏈是一樣的;

5.優缺點及使用場景

優點1、降低耦合度。它將請求的傳送者和接收者解耦。

2、簡化了物件。使得物件不需要知道鏈的結構。

3、增強給物件指派職責的靈活性。通過改變鏈內的成員或者調動它們的次序,允許動態地新增或者刪除責任。

4、增加新的請求處理類很方便。

缺點:1、不能保證請求一定被接收。

2、系統效能將受到一定影響,而且在進行**除錯時不太方便,可能會造成迴圈呼叫。

3、可能不容易觀察執行時的特徵,有礙於除錯。

使用場景:

1、有多個物件可以處理同乙個請求,具體哪個物件處理該請求由執行時刻自動確定。

2、在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求。

3、可動態指定一組物件處理請求。

參考:

java責任鏈模式

責任鏈模式定義如下 使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關 系。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。package cn.yang.test.controller created by dev yang on 2016 3 1.publ...

Java 責任鏈模式

責任鏈模式定義 將能夠處理同一類請求的物件連成一條鏈,所提交的請求沿鏈傳遞,鏈上的物件逐個判斷是否有能力處理該請求,如果能,則自己處理,如果不能,則傳遞給鏈上的下乙個物件。責任鏈模式常見的使用場景 1.接力賽跑 2.公司的公文審批 3.大學裡,獎學金審批流程等。責任鏈主要的作用 責任鏈上的處理者,負...

java設計模式 責任鏈模式

步驟一 建立抽象處理者 handler 角色 這裡是操作與處理分開,介面定義操做方法,抽象類定義處理方法,具體可以寫在一起也行 public inte ce handlerpublic abstract class abstracthandler public void sethandler han...