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

中介者模式

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设计模式之迭代器模式

下一篇

19.Golang设计模式之备忘录模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容