gpt4 book ai didi

java - 将私有(private)实例的访问权限引入外部类的最佳方法

转载 作者:行者123 更新时间:2023-12-02 08:50:49 24 4
gpt4 key购买 nike

首先,不确定这里的主题标题。抱歉,如果它与我的要求不相符。

我现在的情况是,我有一些想法,但我不知道其中一个是否比另一个更好,也许我错过了一些东西。事情是这样的:

目前我有一个实例 A,它创建另一个类 B 的实例,并使用实例 B 的回调(通过类 A 实现的回调类),并使用此回调通知类 C 的另一个实例,也在 A 类和私有(private)内部创建。这是一个摘要图:

enter image description here

现在,将来由于某种原因,它是 D 类的另一个对象,需要创建并保留 B 类的对象。问题是当我有回调时,仍然需要通知对象 C来自 B 对象。当然,C 实例无法从 A 移动到 D。因此,从 D 开始,我既没有 A 实例,也没有 B 实例,而且我不知道执行此操作的最佳方法。这是 D 类的另一张图:

enter image description here

这与第一个图基本相同,只是最后一次调用 (notifySomething()) 是假设的,因为我无权从 D 类访问 C 实例。

有人遇到过这种情况吗?解决它的最佳方法是什么?

谢谢!

最佳答案

AD一个工作:执行业务逻辑(当调用它们的回调方法时)。

考虑到这一点,AD 正在尝试执行三项不属于他们的、不相关的任务。其他东西(可能是 DI 容器)需要负责这些任务。

  1. 依赖管理:AD 不应该关心它们的依赖关系是如何实例化的。应该有其他东西负责实例化 B。创造不是AD的工作。
  2. 监听器注册:AD 不应该关心谁在调用它们的回调方法。其他东西应该负责将 AD 注册到 B。注册不是 AD 的工作。
  3. 监听器通知:AD 不应该关心还有谁需要来自 B 的通知。其他东西应该负责将 C 注册到 B。通知不是 AD 的工作。

一个解决方案...

将所有创建、依赖管理和注册与其他对象分开,并将该逻辑放在自己独特的位置。那个地方叫做 composition root您的应用程序的任何其他对象都不应尝试执行组合根的工作。

目标是实现dependency inversion .

关于java - 将私有(private)实例的访问权限引入外部类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60788358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com