让 child class 与 parent class 通信的最佳方式是什么

What is the best way to let a child class communicate with the parent class

我的问题是,让 child class 与 parent class 通信的最佳方式是什么。 例如: 我有一个主要的 class 简称为 Main,还有另一个 class SomeClass。 现在 Main class 创建了一个 SomeClass 的实例,一旦 SomeClass-object 的状态发生变化,Main class 应该根据发生的变化执行不同的代码。 是的,我知道,这听起来像是 Observer 设计模式,但我将如何以不同方式处理状态更改来实现它? 我目前正在编写一个带有数据库的 Android 应用程序,以使其更加具体。 在我的项目中,我有主要 class、一个 class 连接、读取 from/write 到数据库和一个 GUI 容器 class。 (过于简单,还有一些) 主 class 创建 GUI 和数据库 class 的实例。 现在如果我按下按钮 A,它应该将 A-data 写入数据库, 如果我按下按钮 B,它应该将 B-data 写入数据库。 因为我认为 gui class 不应该直接访问数据库,所以我尝试了其他选项,而不仅仅是从 gui-class 访问数据库 目前,我只用一种方法定义了一个占位符摘要 class,我只是用功能覆盖它。 所以现在我必须为按钮 A 的点击创建一个 one-method-class A,为按钮 B 的点击创建一个 one-method-class B。 这对我来说听起来不是最好的方法,我的意思是它正在工作,但我想改进我的代码,所以如果你有任何想法,请写下你的解决方案。 :)

似乎解决这个问题的一个好方法是使用 previous Stack Overflow answer 中描述的模式。

他们在那里提供了示例实现,但要应用于您的案例,您不需要授予 GUI 直接访问权限,您可以有一个实现“侦听器”功能的父 class 和一个子(GUI) class 仅调用其父级,并从子级中抽象出这些细节。

如果您觉得需要更多 details/examples 来实施此模式,请参阅 https://refactoring.guru/design-patterns/observer/java/example

最好避免在 GUI 中编写代码 class。所以我们可以在这里使用MVVM pattern

让我举一个简单的例子来说明你的情况。这是一个ViewModelclass。视图模型没有引用视图 class:

public class YourViewModel 
{
    public void LoadA() 
    { 
        // here you can interact with your database
    }

    public void LoadB()
    { 
        // here you can interact with your database
    }
}

这是你的 view class。它处理按钮点击、用户与视图的交互并转发到视图模型。它有对视图模型的引用。

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