簡體   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