javascript 的中介者模式是一種設(shè)計(jì)模式,它使得對(duì)象之間的通訊變得簡(jiǎn)單明了。在這種模式中,一個(gè)中介者對(duì)象集中處理對(duì)象之間的交互,避免對(duì)象之間的直接交互。這個(gè)中介者對(duì)象充當(dāng)中心樞紐的角色,通過它來管理不同對(duì)象間的交互。下面我們通過舉例來解釋中介者模式。
function Mediator() {} Mediator.prototype = { send: function(message, colleague) { throw new Error('未實(shí)現(xiàn) send 方法'); }, addColleague: function(colleague) { throw new Error('未實(shí)現(xiàn) addColleague 方法'); } }; var ChatRoom = function() { var colleagues = []; return { send: function(message, colleague) { for(var i = 0; i< colleagues.length; i++) { if (colleagues[i] !== colleague) { colleagues[i].receive(message); } } }, addColleague: function(colleague) { colleagues.push(colleague); } }; }; var User = function(name, mediator) { this.name = name; this.mediator = mediator; }; User.prototype = { send: function(message) { this.mediator.send(message, this); }, receive: function(message) { console.log(this.name + ' 接收到消息:' + message); } };
以上是一段簡(jiǎn)單的中介者模式的代碼,其中定義了一個(gè) Mediator 對(duì)象和一個(gè) ChatRoom 對(duì)象。一個(gè)聊天室中可以有多個(gè)用戶,所以在 ChatRoom 中,通過添加 participants 數(shù)組,管理各個(gè)用戶對(duì)象。這個(gè)聊天室 ChatRoom 對(duì)象就是中介者對(duì)象,在其中定義了 send 和 addColleague 方法,用來處理用戶之間的通訊。
var mediator = new ChatRoom(); var john = new User('John', mediator); var alice = new User('Alice', mediator); var bob = new User('Bob', mediator); mediator.addColleague(john); mediator.addColleague(alice); mediator.addColleague(bob); john.send('Hello Alice');
以上代碼定義了三個(gè)用戶對(duì)象,并添加到 ChatRoom 中,用戶對(duì)象通過 send 方法向其他用戶發(fā)送消息。但是這里沒有需用到用戶之間的對(duì)象交互,而是先把用戶和聊天室中介者分離,把聊天室作為用戶間的中介,來處理他們之間的消息傳遞。
中介者模式的主要優(yōu)點(diǎn)在于:
- 解耦了系統(tǒng)中對(duì)象之間的關(guān)系,把系統(tǒng)中各個(gè)對(duì)象的關(guān)系變得簡(jiǎn)單明了,減少對(duì)象之間的依賴關(guān)系;
- 可以提高系統(tǒng)的靈活性和可擴(kuò)展性;
- 具有良好的可讀性和可維護(hù)性,更加容易維護(hù)和修改系統(tǒng)的代碼。
總的來說,中介者模式的核心思想是,把多個(gè)組成部分的耦合關(guān)系,轉(zhuǎn)化為一個(gè)中介者來處理對(duì)象之間的關(guān)系。這樣處理對(duì)象之間的關(guān)系,不僅可以簡(jiǎn)化系統(tǒng)的復(fù)雜度,還可以減少因?qū)ο笾g的關(guān)系而產(chǎn)生的錯(cuò)誤,保證程序的穩(wěn)定性和可維護(hù)性。