目录
????????中介者模式(Mediator Pattern)引入一个中介者对象,将一组对象的交互行为封装到一个中介者对象中,从而使这些对象不需要显式地相互引用并直接交互。通过中介者对象,这些对象可以间接地交互,从而降低对象之间的耦合性,使得对象之间的通信更加简单和灵活。
(1)优点:
(2)缺点:
不应当在职责混乱的时候使用。
package main
import "fmt"
// 聊天室应用程序,其中有多个用户可以发送消息给其他用户。希望能够实现用户之间的通信,而不需要直接依赖其他用户的对象。
// 中介者接口
type Mediator interface {
SendMessage(message string, user User)
}
// 具体中介者:聊天室
type ChatRoom struct{}
func (cr *ChatRoom) SendMessage(message string, user User) {
fmt.Printf("%s 发送消息:%s\n", user.GetName(), message)
}
// 同事对象接口
type User interface {
GetName() string
SendMessage(message string)
}
// 具体同事对象:用户
type ChatUser struct {
name string
mediator Mediator
}
func NewChatUser(name string, mediator Mediator) *ChatUser {
return &ChatUser{
name: name,
mediator: mediator,
}
}
func (cu *ChatUser) GetName() string {
return cu.name
}
func (cu *ChatUser) SendMessage(message string) {
cu.mediator.SendMessage(message, cu)
}
// 客户端代码
func main() {
chatRoom := &ChatRoom{}
user1 := NewChatUser("User1", chatRoom)
user2 := NewChatUser("User2", chatRoom)
user3 := NewChatUser("User3", chatRoom)
user1.SendMessage("Hello, User2!")
user2.SendMessage("Hi, User1!")
user3.SendMessage("Nice to meet you all!")
}