GO设计模式——19、中介者模式(行为型)
2023-12-22 06:44:21
目录
中介者模式(Mediator Pattern)
????????中介者模式(Mediator Pattern)引入一个中介者对象,将一组对象的交互行为封装到一个中介者对象中,从而使这些对象不需要显式地相互引用并直接交互。通过中介者对象,这些对象可以间接地交互,从而降低对象之间的耦合性,使得对象之间的通信更加简单和灵活。
中介者模式的核心角色:
- 中介者(Mediator):定义了各个对象之间通信的接口。
- 具体中介者(Concrete Mediator):实现了中介者接口,负责协调各个对象之间的通信。
- 同事对象(Colleague):定义了各个对象的通信接口。
- 具体同事对象(Concrete Colleague):实现了同事对象接口,负责实际的通信操作。
优缺点
(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!")
}
文章来源:https://blog.csdn.net/Gloming__zxy/article/details/135132965
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!