設計模式之中介者模式

2022-03-21 08:31:02 字數 2247 閱讀 1797

名詞解釋:

中介者模式:用乙個中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式地相互引用,從而可以獨立地改變它們之間的互動。

必要元素:

抽象物件類:就是用於互動的物件的抽象類;

具體類:繼承自抽象物件類(也就是用於互動的乙個個物件的類);

抽象中介者:定義了具體物件到中介者物件的介面;

具體中介者物件:實現抽象類的方法,它需要知道所有具體物件類,並從具體類接收訊息,向具體物件發出命令。

例子:

抽象中介者類:

abstract

class

mediator

僅僅定義了用於分發訊息的方法。

具體中介者類:

class

concretemediator:mediator

}private

concretecolleague2 colleague2;

internal

concretecolleague2 colleague2

}public

override

void send(string

message, colleague colleague)

else

}}

其中包含了colleageu1和colleague2分別為具體物件1和具體物件2,主要是send方法的重寫,根據colleague來分別向其傳送訊息。

抽象物件類:

class

colleague

}

建構函式必須傳入乙個中介者,這樣才可以將不同的物件關聯起來(在不相互引用的情況下)。

具體物件類1:

class

concretecolleague1:colleague

public

void send(string

message)

public

void notify(string

message)

}

具體物件2:

class

concretecolleague2 : colleague

public

void send(string

message)

public

void notify(string

message)

}

具體物件1和具體物件2的**幾乎一樣,唯一區別就是自己的notify顯示的自己的資訊。整個類中主要就是send和notify方法,send用於在外部向其傳遞訊息,然後通過中介者將訊息分發出去,中介者再根據具體物件,呼叫對應物件的notify方法。

呼叫:

concretemediator mediator = new

concretemediator();

concretecolleague1 colleague1 = new

concretecolleague1(mediator);

concretecolleague2 colleague2 = new

concretecolleague2(mediator);

mediator.colleague1 =colleague1;

mediator.colleague2 =colleague2;

colleague1.send(

"今天吃什麼?");

colleague2.send(

"隨便!");

console.read();

例項化了乙個中介者物件,和兩個具體物件,在例項化具體物件時候將中介者物件傳入,這樣就將中介者和具體物件關聯了起來。然後可以根據自己的需要進行訪問具體物件1或者具體物件2,然後兩個具體物件在互不引用的情況下,實現了資訊的互動(傳遞).

總結:

中介者模式的優點,首先是mediator的出現減少了各個colleague的耦合,使得可以獨立地改變和復用各個colleague類和mediator;其次,由於把物件如何協作進行了抽象,將中介作為乙個獨立的概念並將其封裝在乙個物件中,這樣關注的物件就從物件各個本身的行為轉移到他們之間的互動上來,也就是站在乙個更巨集觀的角度去看待系統。

中介者模式一般應用於一組物件以 良好但是複雜的方式進行通訊的場合,以及象定製乙個分布在多個類中的行為,而又不想生成太多的子類的場合。

設計模式之中介者模式

1 抽象中介者,mediator 抽象中介 author jin.li public abstract class mediator2 具體的中介者,主機板 主機板中介 author jin.li public class mainboard extends mediator if colleagu...

設計模式之中介者模式

中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...

設計模式之中介者模式

嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...