責任鏈模式(行為型)

2021-07-11 16:01:51 字數 2591 閱讀 4114

思考問題:(模擬班遊集體請假),學校規定:對於班遊,學生提交的申請表,必須經過輔導員、系主任、院長、校長簽名確認才能出遊,現在由你來設計該業務模型模擬該需求,應該如何設計?

解答:很直觀的一種想法:我直接設計乙個學生類、乙個申請單類requestnote、乙個輔導員類、乙個系主任類、乙個院長類、乙個校長類,然後為每個類新增審核方法verify(requestnote rn);

然後設定規則:

1. 當輔導員審核通過就呼叫系主任的verify方法,不通過就返回不再向下呼叫。

2. 系主任審核通過就呼叫院長verify方法,否則不再向下呼叫;

3. 依次類推;

很好,這已經是接近責任鏈模式了,因為已經形成了一條鏈;

可優化一下,你會發現上面輔導員類、系主任類、院長類和校長類都有乙個公共的verify方法和下乙個處理類的引用,為了規範和結構清晰,我們是不是應該設計乙個抽象類,新增verify抽象方法和下乙個處理類的引用,讓子類繼承呢?

但是下乙個處理類怎麼表示?你會發現除了學生,其他人的身份都相似都是領導leader,所以設計乙個leader類,建構函式中傳入下乙個處理者的物件,新增乙個verify方法和乙個leader引用(代表下乙個處理類)

學生類的submitreq方法中呼叫乙個leader(輔導員)的verify方法,表示學生向輔導員提交申請(構造輔導員時需要先傳入系主任物件,構造系主任時需要傳入院長物件,構造院長時需要傳入校長物件);

例項**:

leader抽象類:

package com.shusheng.chain.responsibility;

public

abstract

class

leader

輔導員類:

package com.shusheng.chain.responsibility;

/**輔導員類*/

public

class

instructor

extends

leader

@override

public

boolean

verify(requestnote rn)

}

系主任類:

package com.shusheng.chain.responsibility;

/**系主任*/

public

class

departmenthead

extends

leader

@override

public

boolean

verify(requestnote rn)

}

package com.shusheng.chain.responsibility;

/**學院院長*/

public

class

dean

extends

leader

@override

public

boolean

verify(requestnote rn)

}

package com.shusheng.chain.responsibility;

/**校長類*/

public

class

president

extends

leader

@override

public

boolean

verify(requestnote rn)

}

package com.shusheng.chain.responsibility;

/**模擬申請表*/

public

class

requestnote

package com.shusheng.chain.responsibility;

/**學生把申請表提交給輔導員*/

public

class

student

}

package com.shusheng.chain.responsibility;

public

class responsibilitychaintest

}

目錄結構:

輸出結果:

責任鏈模式 行為型

使用場景 1 如果有多個物件可以處理同乙個請求,但是具體由哪個物件來處理該請求,是執行時刻動態確定的。這種情況可以使用職責鏈模式,把處理請求的物件實現成為職責物件,然後把它們構成乙個職責鏈,當請求在這個鏈中傳遞的時候,具體由哪個職責物件來處理,會在執行時動態判斷。2 如果你想在不明確指定接收者的情況...

設計模式 行為型 責任鏈模式

從擊鼓傳花談起 擊鼓傳花是一種熱鬧而又緊張的飲酒遊戲。在酒宴上賓客依次坐定位置,由一人擊鼓,擊鼓的地方與傳花的地方是分開的,以示公正。開始擊鼓時,花束就開始依次傳遞,鼓聲一落,假如花束在某人手中,則該人就得飲酒。擊鼓傳花的類圖結構如下 如果用乙個物件系統描述賈府,那麼賈母 賈赦 賈政 賈寶玉和賈環等...

設計模式 行為型 責任鏈模式

責任鏈 chain of responsibility 模式為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。使用場景 乙個請求物件需要多種任務的處理,通過鏈式傳播物件的場景。優點1.職責鏈對於客戶請求是透明的 2.鏈 將請求的...