我的問題是,讓子類與父類交流的最佳方式是什么。例如:我有一個簡單地稱為 Main 的主類和另一個類 SomeClass。現在 Main 類創建了 SomeClass 的一個實體,一旦 SomeClass 物件的狀態發生變化,Main 類應該執行不同的代碼,具體取決于發生了什么變化。是的,我知道,這聽起來像是觀察者設計模式,但是我將如何通過不同的狀態更改來實作它呢?我目前正在撰寫一個帶有資料庫的 Android 應用程式,以使其更加具體。在我的專案中,我有一個主類、一個用于連接、讀取/寫入資料庫的類和一個 GUI 容器類。(過于簡單,還有一些) 主類創建 GUI 和資料庫類的實體。現在如果我按下按鈕 A,它應該將 A 資料寫入資料庫,如果我按下按鈕 B,它應該將 B 資料寫入資料庫。因為我認為 gui 類不應該直接訪問資料庫,所以我嘗試了其他選項,而不僅僅是從 gui 類訪問資料庫 目前,我定義了一個占位符抽象類,只有一種方法,我只是覆寫與功能。所以現在我必須為單擊按鈕 A 創建一個單一方法類 A,為單擊按鈕 B 創建一個單一方法類 B。這對我來說聽起來不是最好的方法,我的意思是作業,但我想改進我的代碼,所以如果你有任何想法,請寫下你的解決方案。:) 我定義了一個占位符抽象類,只有一個方法,我只是用功能覆寫。所以現在我必須為單擊按鈕 A 創建一個單一方法類 A,為單擊按鈕 B 創建一個單一方法類 B。這對我來說聽起來不是最好的方法,我的意思是作業,但我想改進我的代碼,所以如果你有任何想法,請寫下你的解決方案。:) 我定義了一個占位符抽象類,只有一個方法,我只是用功能覆寫。所以現在我必須為單擊按鈕 A 創建一個單一方法類 A,為單擊按鈕 B 創建一個單一方法類 B。這對我來說聽起來不是最好的方法,我的意思是作業,但我想改進我的代碼,所以如果你有任何想法,請寫下你的解決方案。:)
uj5u.com熱心網友回復:
作為一種好的做法,最好避免在 GUI 類中撰寫代碼。所以我們可以在這里使用MVVM 模式。
讓我為您的案例展示一個簡單的示例。這是一ViewModel堂課。視圖模型沒有對視圖類的參考:
public class YourViewModel
{
public void LoadA()
{
// here you can interact with your database
}
public void LoadB()
{
// here you can interact with your database
}
}
這是你的view課。它處理按鈕單擊、用戶與視圖的互動并轉發到視圖模型。它有一個對視圖模型的參考。
public class YourView
{
YourViewModel yourViewModel;
public YourView()
{
yourViewModel = new YourViewModel();
}
public void ButtonA_Handler()
{
yourViewModel.LoadA();
}
public void ButtonB_Handler()
{
yourViewModel.LoadB();
}
}
如果您想處理許多事件,那么您可以嘗試使用這種方法How to: Handle Multiple Events Using Event Properties。
uj5u.com熱心網友回復:
解決這個問題的好方法似乎是使用之前的 Stack Overflow 答案中描述的模式。
他們在那里提供示例實作,但要應用于您的案例,您不需要直接訪問 GUI,您可以擁有一個實作“偵聽器”功能的父類和一個僅呼叫其父級的子 (GUI) 類,這些細節從孩子身上抽象出來。
如果您覺得需要更多關于實作此模式的詳細資訊/示例,請參閱https://refactoring.guru/design-patterns/observer/java/example
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481947.html
上一篇:.Net未定義物件型別
下一篇:Python獲取父類
