中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)是一种行为型设计模式,其目的是通过一个中介者对象来减少多个对象之间的直接通信,并使其更加松散耦合。中介者模式可以减少对象之间的依赖关系,从而提高系统的灵活性和可扩展性。
在中介者模式中,多个对象之间的交互通过一个中介者对象进行协调和管理。当一个对象发生改变时,它并不直接通知其他对象,而是通过中介者对象来通知,由中介者对象来负责将这个变化传递给其他对象。
下面是 Go 语言中介者模式的示例代码:
package main
import "fmt"
// Mediator 中介者接口
type Mediator interface {
sendMessage(msg string, user User)
receiveMessage() string
}
// ChatRoom 具体中介者
type ChatRoom struct {
Message string
}
func (c *ChatRoom) sendMessage(msg string, user User) {
c.Message = fmt.Sprintf("%s 发送消息: %s\n", user.name, msg)
}
func (c *ChatRoom) receiveMessage() string {
return c.Message
}
// User 用户类
type User struct {
name string
mediator Mediator
}
func (u *User) getName() string {
return u.name
}
func (u *User) setMediator(mediator Mediator) {
u.mediator = mediator
}
func (u *User) sendMessage(msg string) {
u.mediator.sendMessage(msg, *u)
}
func (u *User) receiveMessage() string {
return u.mediator.receiveMessage()
}
func main() {
// 创建中介者对象
chatRoom := &ChatRoom{}
// 创建用户对象,并设置中介者
user1 := &User{name: "User1"}
user2 := &User{name: "User2"}
user1.setMediator(chatRoom)
user2.setMediator(chatRoom)
// 用户发送消息
user1.sendMessage("Hello World!")
fmt.Println(user2.receiveMessage())
user2.sendMessage("Hi!")
fmt.Println(user1.receiveMessage())
}
在上面的示例代码中,我们定义了三个类型:Mediator
(中介者接口)、ChatRoom
(具体中介者)和 User
(用户类)。ChatRoom
实现了 Mediator
接口,负责协调用户之间的交互。User
类有一个 Mediator
类型的属性,用于和中介者对象进行交互。
在 main()
函数中,我们首先创建了一个中介者对象 chatRoom
,然后创建了两个用户对象 user1
和 user2
,并将中介者对象设置给它们。最后,用户对象分别调用 sendMessage()
方法向其他用户发送消息。
总的来说,中介者模式可以使多个对象之间的交互更加简单和清晰,同时也可以提高系统的可扩展性和灵活性。
推荐文章: