1、什麼是責任鏈模式?
定義:將能夠處理同一類請求的物件連成一條鏈,所提交的請求沿著鏈傳遞,鏈上的物件逐個判斷是否有能力處理該請求,如果能處理則處理,如果不能則傳遞給鏈上的下乙個物件。
2、應用場景?
場景:
----打牌時輪流出牌
----接力賽跑
----大學中,獎學金審批
----公司中公文審批
3、uml類圖描述,以生活當中我們請假為例。
先來分析一波這個類圖,首先我們有兩個抽象類,用來定義員工和領導的。這樣當我們需要增加乙個員工或者領導的時候不需要在乙個乙個的新增,減少了**量,提高了擴充套件性,而且對於領導這個抽象類裡邊定義了乙個抽象方法,這個方法專門用來處理員工的請假任務,還有乙個方法,用來指定領導之間的關係。
他的處理流程是,如果請假天數小於7天,組長直接處理,如果大於7天並且小於15天,交給經理來處理,如果大於15天交給總經理來處理,這樣一直鏈結下去。
下面直接上**:
員工抽象類:
引用塊內容
package com.bjsxt.pattern.chain;
//員工抽象類
public
abstract
class
empabstract
public string getname()
public
void
setname(string name)
public
intgetdates()
public
void
setdates(int dates)
public string getwhy()
public
void
setwhy(string why)
@override
public string tostring()
}
領導抽象類:
package com.bjsxt.pattern.chain;
/** * 責任鏈模式
* 領導的抽象類
* * */
public
abstract
class
leader
//提供乙個抽象方法用來處理請求
protected
abstract
void
requesthandler(empabstract emp);
public
leader(string name)
public string getname()
public
void
setname(string name)
}
員工類:
package com.bjsxt.pattern.chain;
//員工類
public
class
empextends
empabstract
}
組長類:
package com.bjsxt.pattern.chain;
//組長類
public
class
zuzhang
extends
leader
@override
protected
void
requesthandler(empabstract emp) else}}
經理類:
package com.bjsxt.pattern.chain;
public
class
jingli
extends
leader
@override
protected
void
requesthandler(empabstract emp) else}}
總經理類:
package com.bjsxt.pattern.chain;
public
class
manager
extends
leader
@override
protected
void
requesthandler(empabstract emp) else}}
測試類:
package com.bjsxt.pattern.chain;
public
class testclient
}
一天乙個設計模式 責任鏈模式
為了避免請求傳送者與多個請求處理者耦合在一起,將所有請求的處理者通過前一物件記住其下乙個物件的引用而連成一條鏈 當有請求發生時,可將請求沿著這條鏈傳遞,直到有物件處理它為止。責任鏈模式主要包含以下角色。抽象處理者 handler 角色 定義乙個處理請求的介面,包含抽象處理方法和乙個後繼連線。具體處理...
設計模式學習之 把物件串成乙個鏈(責任鏈模式)
責任鏈模式就是使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。責任鏈模式重點是在鏈上,鏈上的節點都有可能處理請求,前提是必須是符合處理該節點處理條件,如果不符合將繼續查詢下乙個節點,而處理功能通常會採用遞迴...
使用責任鏈模式實現乙個符合開閉原則的判斷流程
最近專案中的乙個需求就是對於一串資料,通過一系列的判斷條件來判斷其是不是符合要求的。這個判斷條件是不斷變化的。也就是說隨時要增加新的判斷條件或者移除舊的判斷條件,也行我們會覺得寫一大串if else if 不就解決了嗎?當然,if else if可以解決問題,但軟體有乙個重要的原則 開閉原則。什麼是...