是乙個行為設計模式,它允許我們公開乙個統一的介面,系統的不同部分可以通過該介面進行通訊,而不需要顯示的相互作用;
該模式促進鬆散耦合的方式是:確保元件的互動是通過這個中心點來進行處理的,而不是通過顯示的引用彼此;抽象中介者(abstractmediator):定義中介者和各個同事者之間的通訊的介面;
抽象同事者(abstractcolleague):定義同事者和中介者通訊的介面,實現同事的公共功能;
中介者(concretemediator):需要了解並且維護每個同事物件,實現抽象方法,負責協調和各個具體的同事的互動關係;
同事者(concretecolleague):實現自己的業務,並且實現抽象方法,和中介者進行通訊;
其中同事者是多個同事相互影響的才能叫做同事者;比如系統和各個硬體,系統作為中介者,各個硬體作為同事者,當乙個同事的狀態發生改變的時候,不需要告訴其他每個硬體自己發生了變化,只需要告訴中介者系統,系統會通知每個硬體某個硬體發生了改變,其他的硬體會做出相應的變化;
這樣,之前是網狀結構,現在變成了以中介者為中心的星星結構;
var mediator = (function();
//訂閱乙個topic,提供乙個**函式,一旦topic被廣播就執行該**
var subscribe = function (topic, fn)
topics[topic].push();
return this;
};//發布/廣播事件到程式的剩餘部分
var publish = function (topic)
args = array.prototype.slice.call(arguments, 1);
for (var i = 0; i < topics[topic].length; i++)
return this;
};return
};}());
(function (mediator) );
}function publish()
initialize(); //初始化
publish(); //呼叫
})(mediator);
/**
* 同事
* @param mediator
* @constructor
*/function colleague(mediator)
;colleague.prototype.getmediator = function () ;
colleague.prototype.dooperation = function () ;
/** * 中介者(可以處理多個同事)
* @param colleague1
* @param colleague2
* @constructor
*/function mediator(colleague1,colleague2);/*
當乙個同事的狀態發生改變的時候,由中介者獲取到同事,並對該同事的狀態進行改變
不需要和其他同事進行互動
*/mediator.prototype.change = function (colleague) ;
mediator.prototype.setcolleague1 = function (colleague1) ;
mediator.prototype.setcolleague2 = function (colleague2) ;
避免了同事之間的過度耦合,使得中介者可以獨立的管理同事;
但是要注意使用中介者模式,因為這種模式最大的缺點就是:它會引來單一故障點,將mediator放置於模組之間可能導致效能下降,因為有些模組可能需要直接跟另個模組進行通訊;由於松耦合的關係,很難通過緊緊關注廣播來確定乙個系統如果作出反應;
中介者模式詳解
在現實生活中,常常會出現好多物件之間存在複雜的互動關係,這種互動關係常常是 網狀結構 它要求每個物件都必須知道它需要互動的物件。例如,每個人必須記住他 她 所有朋友的 而且,朋友中如果有人的 修改了,他 她 必須告訴其他所有的朋友修改,這叫作 牽一髮而動全身 非常複雜。如果把這種 網狀結構 改為 星...
中介者模式
1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...
中介者模式
中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...