設計模式系列漫談之十二 職責鏈模式

2022-02-28 07:35:45 字數 1184 閱讀 5133

從牙膏廣告說起

在午茶小憩間,以「成語接龍」形式,通過帥哥美女之口巧妙地把牙齒常見的症狀表達出來,從而突出雲南白藥牙膏的獨特功效。這一極其創意的廣告為雲南白藥贏得了巨大的市場,也使其產品為廣大消費者所熟悉,創造了家喻戶曉的品牌效應。

成語接龍是一種人們喜聞樂見的遊戲。就遊戲規則來講非常簡單,即用前乙個成語的尾字作為下乙個成語的首字。我們可以認為,遊戲參與者需要做三件事情:一是接前一位參與人的成語首字;二是說出成語;三是把成語尾字傳給後一位參與人。

職責鏈(chain of responsibility)模式

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

。職責鏈模式需要定義兩個角色:

抽象處理者角色:定義出乙個處理請求的介面。並且定義乙個方法,以設定和返回對下家的引用。這個角色通常由乙個抽象類或介面實現。

具體處理者角色:具體處理者接到請求後,可以處理請求,並將請求傳給下一物件。

下面通過程式來實現如下遊戲:

白領一:生龍活虎  白領二:虎口拔牙  白領三:牙齦腫痛  白領四:痛不欲生

抽象處理者(abstractmember)角色如下:

public

class

abstractmember

public

abstract

void

say(

string

begin);

}具體處理者(member)角色如下:

public

class

member:abstractmember

public

override

void

say(

string

nextbegin)if(

!this

._cy.startswith(nextbegin))

if(_member

!=null)}

}客戶端呼叫如下:

public

class

client

}

設計模式In Java 十二 職責鏈模式

職責鏈模式 chain of responsibility pattern 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。職責鏈模式是一種物件行為型模式。在web應用程式中,一般都會使用到filter,即攔截請求並...

大話設計模式二十二之職責鏈模式

菜鳥工作滿三個月了,馬上要辦轉正首先,提了加薪的事情。菜鳥對經理如實說了自己的想法,希望公司能在轉正時增加工資待遇,經理肯定了菜鳥的能力,但是加薪做不了主,但是幫他向上提一提。然後去找了人力資源總監,總監說這事他也做不了主,畢竟剛畢業的大學生加薪沒有先例,但總監說,等總經理來後,向總經理提一提這個事...

設計模式之職責鏈模式

如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...