簡體   English   中英

模塊Java類之間的循環依賴

[英]Circular dependency between modules java classes

我有兩個模塊:UI和Core。 最后一個駐留業務處理邏輯。 在我的第一個實現中,UI模塊依賴於Core模塊。

但是現在我已經在UI模塊中為Core實現了websocket,以向UI / websocket發送消息以更新有關狀態更改的UI。

UI模塊中有一個Handler類,可以將消息發送到UI-websocket。 我的問題是:如何訪問Core中的Handler類以向Websocket發送消息?

為了解決循環依賴關系,應將公共依賴關系移至另一個新程序包,並使兩個原始程序包僅依賴於新程序包。 例如,您可以將websocket類移動到新軟件包。 還考慮使用轉移對象圖案

如果模塊A定義了interface ,並且模塊A提供了模塊B可以調用以傳遞實現該接口的回調對象的方法,則模塊A可以在不依賴模塊B的情況下調用模塊B。


假設我已經定義了Foobar庫,並且假設Foobar庫的狀態可能由於某些外部事件而改變。 如果庫客戶端希望了解狀態更改,則可以提供一種回調機制:

interface StatusCallback {
    void statusChange(Status status);
}

class Foobar {
    ...
    void registerStatusCallback(StatusCallback statusCallback);
    ...
}

客戶端通過創建實例實例來使用它,該實例將StatusCallback提供給庫:

Foobar foobar = ...;

statusCallback = new StatusCallback() {
    void statusChange(Status status) {
         ...do something with changed status...
    }
};

foobar.registerStatusCallback(statusCallback);

現在,無論何時發生外部事件並且狀態發生變化,庫都將調用客戶端的statusChange(status)方法。 但是庫源代碼不依賴於客戶端代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM