关于设计模式:设计模式中介者Mediator模式

3次阅读

共计 1317 个字符,预计需要花费 4 分钟才能阅读完成。

模式定义

用一个中介对象来封装(封装变动)一系列的对象交互,中介者使各对象不须要显示的互相援用,从而使其耦合涣散(治理变动),而且能够独立地扭转它们之间的交互

类图

利用场景

当多个对象相互关联交互并存在简单的援用关系时,且对新需要须要进行大量更改时应用中介者模式解耦合

长处

能够防止互相交互的对象之间的紧耦合援用关系,从而更好地抵挡变动

要点总结

要点总结

  • 将多个对象间简单的关联关系解耦,Mediator 模式将多个对象间的管制逻辑进行集中管理,变“多个对象相互关联”为“多个对象和一个中介者关联”,简化了零碎的保护,抵挡了可能的变动
  • 随着管制逻辑的复杂化,Mediator 具体对象的实现可能相当简单,这时候能够对 Mediator 对象进行合成解决
  • Facade 模式是解耦零碎间(单向)的对象关联关系,Mediator 模式是解耦零碎内各个对象之间(双向)的关联关系

Go 语言代码实现

工程目录

mediator.go

package Mediator

import "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 {
   Bill
   Ted
}

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 Mediator

import "testing"

func TestNewMediator(t *testing.T) {mediator := NewMediator()
   mediator.Ted.Talk()}
正文完
 0