海珠区做网站的公司,正规的培训机构有哪些,网站开发的需求,网站开发技术论文目录
中介者模式#xff08;Mediator Pattern#xff09;
中介者模式的核心角色#xff1a;
优缺点
使用场景
注意事项
代码实现 中介者模式#xff08;Mediator Pattern#xff09; 中介者模式#xff08;Mediator Pattern#xff09;引入一个中介者对象#xf…
目录
中介者模式Mediator Pattern
中介者模式的核心角色
优缺点
使用场景
注意事项
代码实现 中介者模式Mediator Pattern 中介者模式Mediator Pattern引入一个中介者对象将一组对象的交互行为封装到一个中介者对象中从而使这些对象不需要显式地相互引用并直接交互。通过中介者对象这些对象可以间接地交互从而降低对象之间的耦合性使得对象之间的通信更加简单和灵活。
中介者模式的核心角色
中介者Mediator定义了各个对象之间通信的接口。具体中介者Concrete Mediator实现了中介者接口负责协调各个对象之间的通信。同事对象Colleague定义了各个对象的通信接口。具体同事对象Concrete Colleague实现了同事对象接口负责实际的通信操作。
优缺点
1优点
降低了类的复杂度将一对多转化成了一对一。各个类之间的解耦。符合迪米特原则。
2缺点
中介者会庞大变得复杂难以维护。
使用场景
系统中对象之间存在比较复杂的引用关系导致它们之间的依赖关系结构混乱而且难以复用该对象。想通过一个中间类来封装多个类中的行为而又不想生成太多的子类。
注意事项 不应当在职责混乱的时候使用。
代码实现
package mainimport 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() stringSendMessage(message string)
}// 具体同事对象用户
type ChatUser struct {name stringmediator 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!)
}