設計模式 中介者模式

2021-08-15 18:10:04 字數 1670 閱讀 5390

在學習這個模式之前,我們先來回顧一下乙個物件導向的設計原則——迪公尺特原則,這個原則告訴我們:乙個物件盡可能少跟其他物件進行關聯,就像乙個人要少跟陌生人說話一樣。

而中介者模式,也正是為了協調多個物件之間複雜的引用關係。我們來看乙個例子,雖然這個例子不太好,後期想個好一點的例子再改。

在中介者模式中,主要是引入了中介者角色,分別是抽象中介者具體中介者,封裝了各個物件之間共同的互動方法。

抽象同事類:定義了各個同事類共有的方法,它維持著乙個抽象中介者類的引用。

具體同事類:它是抽象同事類的子類,每乙個同事物件都需要通過中介者與其他同事類進行通訊。

你會發現,這樣我們就重新構造出了一張關係網:

這樣就對同事物件之間的關係行為進行了分離和封裝。

在面向元件開發時,我們經常會使用到一些按鈕、下拉列表、標籤等控制項。問題來了,如果我們希望按鈕一按下,下拉列表就進行改變,或者希望按鈕單擊後,標籤內容就進行改變··· 這就意味著,各個控制項之間需要有乙個關聯的關係。

一般人設計後的關係圖是這樣···

而正確的設計是····

//抽象中介者

abstract class mediator

//具體中介者

public class concretemediator extends mediator

//從列表框選擇客戶

else if(c == image)

//從組合框選擇客戶

else if(c == list)

} }//抽象同事類

abstract class control

public void changed()

public abstract void update();

public abstract void select();

}//具體同事類:按鈕

public class button extends control

public void select()

}//具體同事類:列表

public class list extends control

public void select()

}//具體同事類:

public class image extends control

public void select()

}public class test

}

這樣一設計,我們就對各個同事類之間的互動進行了解耦。而且,如果我們相加乙個lable標籤,當滑鼠單擊的時候就進行怎樣的互動。我們可以增加乙個新的中介者,又或者是在原來的中介者基礎上進行擴充套件。

中介者模式的核心在於,對多個物件之間的互動進行了解耦。缺點相信大家都看到了,如果按照上面去設計,得主動去設定各個控制項之前的關係,**很冗長。而且,具體中介者包含了大量互動的細節,使中介者變得難以維護。

設計模式 中介者模式

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

設計模式 中介者模式

在我們的日常生活中經常需要購買各種各樣的東西,房子 車子 生活用品等等。那麼我們並不會對各個產品都了解,所以銷售人員應運而生,他們了解產品,然後他們根據你的需求在向你們推薦符合你們要求的產品。這些銷售人員就相當於中介,處於客戶和產品之間,為你們搭橋牽線。這就是這篇需要講述的乙個設計模式 中介者模式。...

設計模式 中介者模式

問題 當專案有多個系統或者管理類,他們之間需要互相呼叫的時候,怎麼辦。如果直接在這些系統或者管理類之間互相注入對方的引用,這雖然可以暫時解決問題,但後期會造成 的依賴程度變高,耦合難解,而且單個類知道的引用內容過多,不符合最少只是原則,推薦使用中介者模式解耦和。抽象類如下 中介者介面 public ...