![](/img/trans.png)
[英]is it possible to have a circular dependency between .java and .scala classes?
[英]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.