Java設(shè)計模式編程中的責任鏈模式使用示例
責任鏈模式:多個對象由其對象對應(yīng)下家的引用連成一條鏈,請求在這個鏈上傳遞,直到 鏈上的某一個接收對象處理此請求。因為請求的客戶端并不知道鏈上最終是誰來處理這個請求,使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織和分配責任, 從而避免了請求發(fā)送者與請求處理者之間的耦合。
責任鏈械中涉及到三種角色:
1,抽象處理者角色
2,具體處理者角色
3,請求發(fā)送者
小例子:假設(shè)去買房子,買房子就需要砍價, 賣房的人職位不同,可以優(yōu)惠的價格也不同,不同職位就可以形成一個處理請求的鏈。我們暫定: * 基層銷售員,只能優(yōu)惠3% * 銷售經(jīng)理:可以優(yōu)惠5% * 銷售總監(jiān):可以優(yōu)惠8% * 老板(Boss):優(yōu)惠10%
Java實例
類圖:

/**
* 抽象責任
*/
public abstract class IFilter {
private IFilter successor;
public IFilter getSuccessor() {
return successor;
}
public void setSuccessor(IFilter successor) {
this.successor = successor;
}
public abstract void handleFilter();
public abstract void handleFilter2();
}
/**
* 具體責任
*/
public class ConcreteFilter extends IFilter {
private String name;
public ConcreteFilter(String name) {
this.name = name;
}
@Override
public void handleFilter() {
/*
* 自己先處理,如有后繼者,再由它處理一次
*/
System.out.println(name + " 處理了請求");
if (getSuccessor() != null) {
getSuccessor().handleFilter();
}
}
@Override
public void handleFilter2() {
/*
* 有后繼者就后繼者處理, 否則自己處理
*/
if (getSuccessor() != null) {
getSuccessor().handleFilter2();
} else {
System.out.println(name + " 處理了請求");
}
}
}
public class Test {
public static void main(String[] args) {
IFilter filter1 = new ConcreteFilter("permission-filter");//權(quán)限過濾
IFilter filter2 = new ConcreteFilter("suffix-filter");//后綴名過濾
IFilter filter3 = new ConcreteFilter("style-filter");//風格過濾
filter1.setSuccessor(filter2);
filter2.setSuccessor(filter3);
System.out.println("------以下是每一個處理者(包括后繼者)都處理了, 順序也是一級一級的傳遞------");
filter1.handleFilter();
System.out.println("------以下是交由最后一個后繼者處理------");
filter1.handleFilter2();
}
}
打?。?/p>
------以下是每一個處理者(包括后繼者)都處理了, 順序也是一級一級的傳遞------ permission-filter 處理了請求 suffix-filter 處理了請求 style-filter 處理了請求 ------以下是交由最后一個后繼者處理------ style-filter 處理了請求
相關(guān)文章
Java簡單實現(xiàn)SpringMVC+MyBatis分頁插件
自己最近搭建的一個SpringMVC+Mybatis的框架 屬于無實體類的框架 并實現(xiàn)了Myabtis的自動分頁和總數(shù)查詢 只要傳入分頁參數(shù)便能自動查詢總數(shù)和分頁 總數(shù)封裝在參數(shù)里面執(zhí)行查詢后可以直接從參數(shù)中獲取2015-09-09
Java中Dijkstra算法求解最短路徑的實現(xiàn)
Dijkstra算法是一種解決最短路徑問題的常用算法,本文主要介紹了Java中Dijkstra算法求解最短路徑的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-09-09
Spring Boot整合MyBatis連接Oracle數(shù)據(jù)庫的步驟全紀錄
這篇文章主要給大家介紹了關(guān)于Spring Boot整合MyBatis連接Oracle數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07

