繁体   English   中英

调解员模式是否适用于这种情况?

[英]Does Mediator Pattern work in this situation?

所以对于我目前的项目,基本上有三个主要的Java类:

  1. GUI
  2. 即时通讯
  3. 计算

基本上,需要进行完全通信,因此我们决定使用中介方法,而不是允许GUI运行整个项目。

基本上,调解员将封装通信。 我们遇到的问题是如何允许GUI组件更新,而无需构建大量方法,以便中介在任何时候完成调用。

防爆。 假设GUI想要登录用户,它通过介体创建一个线程并登录,但是介体必须将成功/失败转发回GUI并更新状态消息。

另一个问题是需要更新GUI但不需要主持人的事情。 允许GUI创建该类的实例并运行它或者是否所有内容都通过调解器是否切实可行?

我们的原始设计只是让GUI管理所有内容,但它确实杀死了可重用性。 在这种情况下是否有更好的设计方法?

如果您发现Observer带来了太多的开销,Mediator可能是最好的方法。 我绝对认为你不应该让GUI运行这个节目。 如果您打算使用Mediator模式,调解员本身应该负责。 您可能会考虑的是Command模式的变体。 如果您使用的是Ruby,我可能会建议传递函数回调,以避免让调解器为每个小东西联系GUI。 但由于它是Java,因此在Command模式样式中封装动作的某种形式可能有所帮助。

如果您不希望调解器触发回调/通知,您可以将回调注入登录功能,并在完成后登录调用。

不过,我不知道如何在Java中注入回调。 在函数是一等公民的语言中,你可以只传递函数,但是你使用Java,所以我猜你必须使用命令模式作为kmorris建议。

您也可以尝试让GUI为调解器提供一个回调对象,该对象处理检索返回值或设置所需的任何值(Command模式的一个版本)。 然后,从GUI到调解器的每次调用都会有一个。

另一个想法是将介体调用的方法分组为语义相关的块。 特别是如果介体具有可以连续调用多个GUI方法的部分:

   gui.a()
   gui.b()
   gui.c()

你可以创建一个方法来处理调用所有三个的结果。 语义分组方法(即setFileInformation over setFileMenusetTab等)的优点是,如果您需要更改GUI,方法的内容可能会更改,但调解器所做的调用可能不会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM