设计模式--中介者(Mediator)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--中介者(Mediator)模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模式定義
用一個(gè)中介對象來封裝(封裝變化)一系列的對象交互,中介者使各對象不需要顯示的相互引用,從而使其耦合松散(管理變化),而且可以獨(dú)立地改變它們之間的交互
類圖
應(yīng)用場景
當(dāng)多個(gè)對象互相關(guān)聯(lián)交互并存在復(fù)雜的引用關(guān)系時(shí),且對新需求需要進(jìn)行大量更改時(shí)使用中介者模式解耦合
優(yōu)點(diǎn)
可以避免相互交互的對象之間的緊耦合引用關(guān)系,從而更好地抵御變化
要點(diǎn)總結(jié)
要點(diǎn)總結(jié)
- 將多個(gè)對象間復(fù)雜的關(guān)聯(lián)關(guān)系解耦,Mediator模式將多個(gè)對象間的控制邏輯進(jìn)行集中管理,變“多個(gè)對象互相關(guān)聯(lián)”為“多個(gè)對象和一個(gè)中介者關(guān)聯(lián)”,簡化了系統(tǒng)的維護(hù),抵御了可能的變化
- 隨著控制邏輯的復(fù)雜化,Mediator具體對象的實(shí)現(xiàn)可能相當(dāng)復(fù)雜,這時(shí)候可以對Mediator對象進(jìn)行分解處理
- Facade模式是解耦系統(tǒng)間(單向)的對象關(guān)聯(lián)關(guān)系,Mediator模式是解耦系統(tǒng)內(nèi)各個(gè)對象之間(雙向)的關(guān)聯(lián)關(guān)系
Go語言代碼實(shí)現(xiàn)
工程目錄
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() } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的设计模式--中介者(Mediator)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--门面(Facade)模式
- 下一篇: asp.net ajax控件工具集 Au