18.Golang设计模式之中介者模式

ShawnLee_123 · · 780 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

中介者模式

GitHub代码链接
中介者模式(Mediator Pattern)用来降低多个对象和类之间的通信复杂性。

什么是中介者模式

对象之间存在大量的关联关系,势必会导致系统结构变得复杂。若一个对象改变,还要跟踪与其相关的对象,跟着一起改变。
中介者模式提供了一个中介类,该类通常处理不同类之间的通信,并且支持松耦合,使代码易于维护。

解决了什么问题

中介者模式解决了多个类相互耦合,导致系统复杂度升高的问题。通常1.用于机场调度系统。2.MVC框架,其中C(控制器)就是M(模型)和V(视图)的中介者。

优点

  • 降低系统复杂度
  • 各个类之间解耦

缺点

  • 中介者会变得庞大,复杂难以维护

代码实现

我们使用聊天室来模拟中介者模式,聊天室作为一个中介者,每个用户通过聊天室想其他用户发送消息。

1.1 实现聊天室类

//ChatRoom 聊天室类,当做中介者
type ChatRoom struct{}

var chatRoom = NewChatRoom()

//NewChatRoom 实例化中介者
func NewChatRoom() *ChatRoom {
    return &ChatRoom{}
}

//ShowMessage 中介者发送消息
func (cr *ChatRoom) ShowMessage(user *User, msg string) {
    fmt.Printf("%s: [ %s ]: %s \n",
        time.Now().Format("2006-01-02 15:04:05"),
        user.GetName(),
        msg)
}

1.2 实现用户类

//User 用户类
type User struct {
    Name string
}

//NewUser 实例化用户类
func NewUser(name string) *User {
    return &User{
        Name: name,
    }
}

//SendMessage 用户类使用中介者发送消息
func (u *User) SendMessage(msg string) {
    chatRoom.ShowMessage(u, msg)
}

//GetName 获取用于昵称
func (u *User) GetName() string {
    return u.Name
}

上一篇

17.Golang设计模式之迭代器模式

下一篇


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ShawnLee_123

查看原文:18.Golang设计模式之中介者模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

780 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传