日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式--中介者(Mediator)模式

發布時間:2025/3/21 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--中介者(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)模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。