四种类型的调解员

时间:2014-02-27 11:09:03

标签: oop design-patterns class-diagram mediator

我经常遇到在多对多关系中选择交互模式的问题。以下示例演示了实现相同目标的四种不同方法。

目标是从一组实体(DeliveryCompanyCollegeSupermarket)向另一组(LazyBob,{{1}传递消息(广告) },CleverAnn)。显然,我们需要一个调解员(FastJon),这将有助于两个发布商向适当的人和订阅者发布广告,并通知他们有趣的提案。

现在不再关注广告,但如果重要,我们可以假设将来有必要。无论如何,这个回复必须有不同的路径(我们没有回复其他广告的广告,对吗?)

首先

所有订阅者必须实现描述其差异的界面。 Mediator随之注入,并为出版商的目的实施界面。

Mediator-1

第二

第一个反向版本。现在,发布商实现了描述其偏好的界面。它由调解器使用,为用户的目的实现接口。

Mediator-2

第三

Mediator实现了两个界面:用于发送目标广告(后端)和接收有趣主题(前端)的广告。后端注入所有发布者,前端注入所有订阅者。

Mediator-3

第四:

第三版的反向版本。现在调解员注入了许多实现其接口的发布者和订阅者。

Mediator-4

问题

这些变种是否成功达到了目标?

在开发的早期阶段,每一个都可以毫无疑问地选择,对与否?如果没有,选择的算法是什么?

1 个答案:

答案 0 :(得分:1)

鉴于您希望最小化耦合,理想情况下,公司和JobSeekers只使用AdBoard的接口,但它们不需要任何结构更改。

但是,如果求职者必须订阅(并且现在必须对此进行建模),那么您需要IAdSubscriberInterface,而AdBoard需要聚合订阅者。

如果JobSeekers只是在AdBoard有空的时候看AdBoardAdBoard需要对JobSeekers一无所知。

除非存在某种业务关系,否则AdBoard可能也不需要了解有关AdPublishers的任何信息。

图片中缺少的是广告。 {{1}}汇总了广告。广告可能需要一些有关AdPublisher的信息。它可以与AdPublisher保持关联。 或者,如果您想进一步减少耦合,公司名称等所需信息只会在创建时复制到广告中,就像纸质广告一样。