中介者模式
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
}