中介者模式(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,然后创建了两个用户对象 user1user2,并将中介者对象设置给它们。最后,用户对象分别调用 sendMessage() 方法向其他用户发送消息。

总的来说,中介者模式可以使多个对象之间的交互更加简单和清晰,同时也可以提高系统的可扩展性和灵活性。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~