Chapter25 中介者模式

2022-08-13 04:27:18 字數 2774 閱讀 5063

儘管將乙個系統分割成許多物件通常可以增加其可復用性,但是物件間的相互連線的激增又會降低其可復用性。大量的各個物件之間的連線使得乙個物件不可能在沒有其他物件的支援下工作,系統表現為乙個不可分割的整體,所以,對系統的行為進行任何交大的改動就十分困難了。中介者模式解決了這個難題。

中介者模式(mediator) ,用乙個中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變他們之間的互動。

中介模式的優缺點:

中介模式很容易在系統中應用,也很容易在系統中誤用,當系統出現了 『多對對』 互動複雜的物件群時,不要急於使用中介者模式,而要先反思你的系統在設計上是不是合理。

中介者模式減少了各個類之間的耦合,使得可以獨立的改變和復用各個類和中介者類。由於把物件如何協作進行了抽象,將中介作為乙個獨立的概念並將其封裝在乙個物件中,這樣關注的物件就從物件各自本身的行為轉移到它們之間的互動上來,也就是站在乙個更巨集觀的角度去看待系統。這就導致了中介者類會比其他個各個類都要複雜。

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

meidator類

#ifndef _mediator_hpp

#define _mediator_hpp#include

class

colleague;

class

mediator;

#endif

//

colleague類

#ifndef _colleague_hpp

#define _colleague_hpp#include

"mediator.hpp

"class

colleague

protected

: mediator*mediator;

};#endif

//

concretecolleague1 類

#ifndef _concretecolleague1_hpp

#define _concretecolleague1_hpp#include

"colleague.hpp

"#include

using

namespace

std;

class concretecolleague1: public

colleague

void send(string

meg)

void receivemeg(string

meg)

};#endif

//

concretecolleague2 類

#ifndef _concretecolleague2_hpp

#define _concretecolleague2_hpp#include

"colleague.hpp

"#include

using

namespace

std;

class concretecolleague2: public

colleague

void send(string

meg)

void receivemeg(string

meg)

};#endif

//

concretemediator 類

#ifndef _concretemediator_hpp

#define _concretemediator_hpp#include

"mediator.hpp

"#include

"concretecolleague1.hpp

"#include

"concretecolleague2.hpp

"class concretemediator: public

mediator

virtual

void send(std::string meg, colleague* from)override

else

}else

if(from ==colleague2)

else

}else

}void setcolleague1(concretecolleague1 *col)

void setcolleague2(concretecolleague2*col)

private

: concretecolleague1*colleague1;

concretecolleague2*colleague2;

};#endif

//

客戶端**

#include#include

"concretemediator.hpp

"#include

"concretecolleague1.hpp

"#include

"concretecolleague2.hpp

"using

namespace

std;

intmain()

執行結果

19 中介者模式

中介者模式主要解決的問題 當有多個類之間有相互呼叫的關係時,如果將這些類相互關聯在一起,那麼當呼叫方式發生變化時,可能需要去每個類中去修改呼叫方式。這樣的修改會就會導致維護麻煩。中介者模式的根本還是做解耦。我在網上看了很多人解釋的中介者模式和他們的舉例,方式都不大一樣,但是根據自己的理解,中介者模式...

21 中介者模式

中介者模式 mediator 調停者模式 用乙個中介物件來封裝一系列的物件互動。中介者使各個物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動。主要解決 物件與物件之間存在大量的關聯關係,這樣勢必會導致系統的結構變得很複雜,同時若乙個物件發生改變,我們也需要跟蹤與之相關聯的...

設計模式 21 中介者模式

中介者模式 用乙個中介物件來封裝一系列的物件互動 中介者 就像我們在租房子一樣,有租房子的中介 抽象中介者 mediator package com.actionpattern.intermediary.edition1 抽象中介者 mediator public abstract class me...