中介者模式是一种行为设计模式,它允许你减少对象之间的直接交互,将这些交互移到一个中介者对象中。这样可以降低对象之间的耦合度,使系统更易于维护和扩展。
降低耦合度:通过引入中介者对象,各个对象之间的交互不再直接进行,而是通过中介者进行,降低了对象之间的耦合度。
集中控制:中介者对象可以集中控制对象之间的交互,便于管理和维护。
简化对象接口:对象只需要与中介者交互,不需要知道其他对象的接口,简化了对象的接口。
对象之间存在复杂的交互关系:当对象之间的交互关系变得复杂时,使用中介者模式可以简化这些交互。
需要简化对象之间的交互:当对象之间的交互变得复杂且难以维护时,可以使用中介者模式来简化这些交互。
需要集中控制对象之间的交互:当需要集中控制对象之间的交互时,可以使用中介者模式。
下面是一个简单的中介者模式的Go语言示例。在这个例子中,我们有一个聊天室(中介者),多个用户可以通过聊天室进行交流。
package main
import (
"fmt"
)
// Mediator 中介者接口
type Mediator interface {
SendMessage(user User, message string)
}
// ConcreteMediator 具体中介者
type ConcreteMediator struct {
users []User
}
// 添加用户
func (m *ConcreteMediator) AddUser(user User) {
user.SetMediator(m)
m.users = append(m.users, user)
}
// 发送消息
// 实现了 Mediator 接口
func (m *ConcreteMediator) SendMessage(user User, message string) {
for _, u := range m.users {
if u != user {
u.Receive(message)
}
}
}
// User 用户接口
type User interface {
Send(message string)
Receive(message string)
SetMediator(mediator Mediator)
}
// ConcreteUser 具体用户
type ConcreteUser struct {
name string
mediator Mediator
}
func (u *ConcreteUser) Send(message string) {
fmt.Printf("%s sends: %s\n", u.name, message)
u.mediator.SendMessage(u, message)
}
func (u *ConcreteUser) Receive(message string) {
fmt.Printf("%s receives: %s\n", u.name, message)
}
func (u *ConcreteUser) SetMediator(mediator Mediator) {
u.mediator = mediator
}
func main() {
mediator := &ConcreteMediator{}
user1 := &ConcreteUser{name: "Alice"}
user2 := &ConcreteUser{name: "Bob"}
mediator.AddUser(user1)
mediator.AddUser(user2)
user1.Send("Hello Bob!")
user2.Send("Hi Alice!")
}