軟體體系結構 責任鏈模式

2021-09-22 13:05:34 字數 2027 閱讀 5795

責任鏈模式為某個請求建立乙個物件鏈,每個物件依次檢查此請求,並對其進行處理,或者將它傳給鏈中的下乙個物件。

鍊錶是很常見一種資料結構,責任鏈模式的結構其實和鍊錶相差無幾,唯一的區別就是責任鏈模式中所有的物件都有乙個共同的父類(或介面):

在責任鏈模式中,n個 handler 子類都處理同乙個請求,只不過具體的職責有所差別。

當有乙個請求進入時,先經過 ahandler 的 handlerrequest 方法,然後再把請求傳遞給 bhandler,b 處理完再把請求傳遞給 chandler,以此類推,形成乙個鏈條。鏈條上的每乙個物件所承擔的責任各不相同,這就是責任鏈模式。

現在我們模擬乙個場景:論壇使用者發表帖子,但是常常會有使用者一些不良的資訊,如廣告資訊,涉黃資訊,涉及政治的敏感詞等。這時我們就可以使用責任鏈模式來過濾使用者發表的資訊。

先定義所有責任鏈物件的父類:

/**

* 帖子處理器

*/public

abstract

class

posthandler

public

abstract

void

handlerrequest

(post post)

;protected

final

void

next

(post post)

}}

父類 handler 主要封裝了傳遞請求等方法,其中要注意的有兩點:

廣告處理器:

/**

* 廣告處理器

*/public

class

adhandler

extends

posthandler

}

涉黃處理器:

/**

* 涉黃處理器

*/public

class

yellowhandler

extends

posthandler

}

呼叫:

//建立責任物件

posthandler adhandler =

newadhandler()

;posthandler yellowhandler =

newyellowhandler()

;posthandler swhandler =

newsensitivewordshandler()

;//形成責任鏈

yellowhandler.

setsuccessor

(swhandler)

;adhandler.

setsuccessor

(yellowhandler)

;post post =

newpost()

;post.

setcontent

("我是正常內容,我是廣告,我是涉黃,我是敏感詞,我是正常內容");

system.out.

println

("過濾前的內容為:"

+post.

getcontent()

);post = adhandler.

handlerrequest

(post)

;system.out.

println

("過濾後的內容為:"

+post.

getcontent()

);

可能大家有疑問,為什麼不把所有的過濾器寫在乙個方法裡呢?因為這樣做又破壞了開放封閉原則。我們需要使用責任鏈模式,能夠在不修改已有**的情況下擴充套件新功能。

責任鏈模式將常用於過濾器,***,事件(滑鼠鍵盤事件,冒泡事件等)等場景

軟體體系結構 軟體體系結構概論

開學到現在我已經上了三節軟體體系結構的課程,現在我想把自己學到的整理歸納一下。此篇隨筆對應於教材軟體體系結構概論一章。首先談一談我剛接觸這門課程是的感受。那就是 我靠 軟體也會有體系結構?以前只學過資料結構 演算法 基本的程式語言,覺得程式設計無非就是使用者給我需求,我便按照需求來程式設計序就好,從...

軟體體系結構 組合模式

在軟體設計與程式設計中經常會遇到屬性資料,當處理屬性結構的資料時,程式設計師必須經常區分葉子結點和樹的乙個樹枝結點。這使得 變得更加複雜,容易出錯。允許一致地對待複雜和原始物件的介面,客戶類以相同的方式對待單獨的物件和一組物件。使用不同的語言作為問候語,使用者選擇乙個國家,程式顯示該國家見面時使用的...

軟體體系結構

軟體體系結構是具有一定形式的結構化元素,即構件的集合,包括處理構件 資料構建 連線構建。處理構建 負責對資料進行加工 資料構建 是被加工的資訊 連線構建 把體系結構的不同部分組合連線起來 1 作為通訊的手段 2 代表了早期的設計決策結果 3 高層次的設計復用手段 1 軟體體系結構是風險承擔者 又稱涉...