uml 中的观察者模式实现

时间:2021-04-15 11:07:34

标签: java design-patterns observer-pattern

我想向我们的订阅者添加通知服务。订阅者将能够选择 你最喜欢的部分。当他们中的任何一个发表新文章时,它将发送给他们 带有标题的电子邮件。我们希望提供一种避免对接的解决方案 订阅者和文章之间。 我们有一个 EMailServer 邮件服务器。您不需要知道您的详细信息 配置,或 sendEMail 方法。这些细节都封装在这个类中,其 通过单例模式应用程序访问服务:

enter image description here

责任模式对我来说很清楚,我会使用观察者,但我不知道我是否实施得很好。

我也想过实现控制器设计模式,但是这产生了更多关于如何将其转换为uml的疑问,目前我对观察者的实现如下,不知道是否正确:

>

enter image description here

我所做的是,观察者将成为邮件服务器,它将通知订阅者他最喜欢的部分的新文章,而可观察者将与文章的特定主题相关。

我不知道这是否可以,但我想到了这个

关于设计模式,由于单例,我有更多的疑问。

2 个答案:

答案 0 :(得分:1)

我认为用户(订阅者)执行的“将此标记为我最喜欢的”操作应该会导致创建观察者对象,该对象会记住创建它的用户并链接(“附加”)到观察到的部分( '主题')。

然后,当添加新文章时,每个部分都应向其所有观察者发送通知(“更新”)。
观察者应该记住其最近更新的一些时间戳或其他标识符,以便它可以在“主题”中检查自上次更新以来添加了哪些文章。然后它通过电子邮件服务器向其订阅者发送一封电子邮件,其中包含有关新文章的信息(并更新其最近更新的内部时间戳/ID)。

或者,“更新”通知可以携带新文章的标题或其他一些 ID(URL...?)。
收到通知后,每个观察者都会向订阅者(记住其 ID)发送一封电子邮件,内容涉及某篇文章(其在“更新”调用中收到的 ID)。

当然也应该有一个“unfavourite”函数供用户使用,它会找到一个对应的观察者对象,将它从一个主体中分离出来,最后销毁它。

答案 1 :(得分:1)

从几个问题开始,SuscriptorInterfaceObservator 命名 那么我们有模式设计问题,我认为您的 subscriber 应该实现 Implement Observer,而不是由 Server 子类化,然后您可以在 Server 内部使用它作为组合,但类型为 InterfaceObservator

class Suscriptor implements InterfaceObsevator{
//implement here
    }

class Server implements OtherInterface{
//uses Observer
    private InterfaceObsevator suscriptor

 }