Smalltalk 语言 设计模式之中介者模式实战

Smalltalk阿木 发布于 2025-05-29 8 次阅读


中介者模式实战:Smalltalk 语言实现

中介者模式是一种行为设计模式,它通过引入一个中介对象来降低多个对象之间的耦合度。在Smalltalk语言中,我们可以通过定义一个中介者类来协调多个对象之间的交互,从而简化系统结构,提高代码的可维护性和可扩展性。

本文将围绕中介者模式在Smalltalk语言中的实现,通过一个简单的示例来展示如何使用中介者模式来管理对象间的通信。

Smalltalk 简介

Smalltalk是一种面向对象的编程语言,它以其简洁的语法和强大的对象模型而闻名。在Smalltalk中,所有的事物都是对象,包括数字、字符串、函数等。Smalltalk的类定义了对象的属性和方法,而对象则是类的实例。

中介者模式概述

中介者模式的核心思想是引入一个中介者对象,该对象负责管理多个对象之间的通信。在中介者模式中,通常有以下角色:

- 中介者(Mediator):协调各个对象之间的交互。
- 同事(Colleague):与中介者通信的对象,每个同事只知道中介者,不知道其他同事。
- 具体中介者(Concrete Mediator):实现中介者接口的具体类,负责管理同事对象之间的通信。
- 具体同事(Concrete Colleague):实现同事接口的具体类,与中介者通信。

实战示例:聊天室

假设我们要设计一个聊天室系统,其中包含多个用户(User)和聊天室(ChatRoom)。用户可以在聊天室中发送消息,而聊天室则负责将消息广播给所有用户。

1. 定义中介者接口

smalltalk
ChatRoomMediator := class {
initialize
|users:Collection|
users := Collection new.
addUser: aUser
users add: aUser.
broadcastMessage: aMessage
users do: [ :user | user sendMessage: aMessage ].
}

2. 定义具体中介者

smalltalk
ChatRoom := subclassOf: ChatRoomMediator {
initialize
super initialize.
+message
sendMessage: aMessage
"Broadcast the message to all users."
super broadcastMessage: aMessage.
}

3. 定义同事接口

smalltalk
User := class {
initialize
|name:Symbol, mediator:ChatRoomMediator|
mediator := ChatRoom new.
mediator addUser: self.
name := 'User_' asSymbol.
+message
sendMessage: aMessage
"Send the message to the mediator."
mediator broadcastMessage: aMessage.
name
}

4. 定义具体同事

smalltalk
Alice := User new.
Bob := User new.
Alice name
Bob name

5. 测试聊天室

smalltalk
Alice sendMessage: 'Hello, Bob!'.
Bob sendMessage: 'Hi, Alice!'.
Alice sendMessage: 'How are you doing?'
Bob sendMessage: 'I am fine, thanks!'

总结

通过上述示例,我们使用Smalltalk语言实现了中介者模式。在这个聊天室系统中,用户通过中介者(聊天室)发送消息,聊天室负责将消息广播给所有用户。这种设计降低了用户之间的耦合度,使得系统更加灵活和可扩展。

中介者模式在Smalltalk语言中的实现非常简单,通过定义中介者接口和具体中介者,我们可以轻松地协调对象之间的通信。在实际项目中,中介者模式可以帮助我们简化系统结构,提高代码的可维护性和可扩展性。