设计模式--中介者(Mediator)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--中介者(Mediator)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
用一個中介對象來封裝(封裝變化)一系列的對象交互,中介者使各對象不需要顯示的相互引用,從而使其耦合松散(管理變化),而且可以獨立地改變它們之間的交互
類圖
應用場景
當多個對象互相關聯交互并存在復雜的引用關系時,且對新需求需要進行大量更改時使用中介者模式解耦合
優點
可以避免相互交互的對象之間的緊耦合引用關系,從而更好地抵御變化
要點總結
要點總結
- 將多個對象間復雜的關聯關系解耦,Mediator模式將多個對象間的控制邏輯進行集中管理,變“多個對象互相關聯”為“多個對象和一個中介者關聯”,簡化了系統的維護,抵御了可能的變化
- 隨著控制邏輯的復雜化,Mediator具體對象的實現可能相當復雜,這時候可以對Mediator對象進行分解處理
- Facade模式是解耦系統間(單向)的對象關聯關系,Mediator模式是解耦系統內各個對象之間(雙向)的關聯關系
Go語言代碼實現
工程目錄
mediator.go
package Mediatorimport "fmt"type Mediator interface {Communicate (who string) }type WildStallion interface {SetMediator(mediator Mediator) }type Bill struct {mediator Mediator } func (b * Bill) SetMediator(mediator Mediator) {b.mediator = mediator }func (b * Bill) Respond () {fmt.Println("bill what ?")b.mediator.Communicate("bill") }type Ted struct {mediator Mediator }func (t *Ted) Talk () {fmt.Println("Ted : Bill?")t.mediator.Communicate("Ted") }func (t *Ted) SetMediator(mediator Mediator) {t.mediator = mediator }func (t *Ted) Respond() {fmt.Println("Ted:how are you today?") } type ConcreteMediator struct {BillTed }func NewMediator() *ConcreteMediator {mediator := &ConcreteMediator{}mediator.Bill.SetMediator(mediator)mediator.Ted.SetMediator(mediator)return mediator }func (m *ConcreteMediator) Communicate(who string) {if who == "Ted" {m.Bill.Respond()}else {m.Ted.Respond()} }mediator_test.go
package Mediatorimport "testing"func TestNewMediator(t *testing.T) {mediator := NewMediator()mediator.Ted.Talk() } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的设计模式--中介者(Mediator)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--门面(Facade)模式
- 下一篇: 设计模式--状态(State)模式