使私有实例访问外部类的最佳方法

问题描述 投票:0回答:1

首先,不确定此处的主题名称。抱歉,它是否与我要问的不完全一致。

我处于一种想法,但是我不知道其中一个比另一个更好的方法,也许我正在丢失一些东西。这是东西:

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

enter image description here

现在,由于某种原因,将来它是类D的另一个对象,它需要创建并保留类B的对象。问题是,当我有来自以下对象的回调时,仍然需要通知对象C B对象。当然,C实例不能从A迁移到D。因此,从D到我既没有A实例也没有B实例,而且我不知道这样做的最佳方式。这是另一个带有D类的图:

enter image description here

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

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

谢谢!

java algorithm performance oop security
1个回答
0
投票

AD具有one作业:执行业务逻辑(在调用其回调方法时)。

考虑到这一点,AD试图执行三个不属于它们的无关任务。其他事情(也许是DI容器)需要承担这些任务的责任。

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

一种解决方案...

将所有创建,依赖项管理和注册与您的其他对象分开,并将该逻辑放在自己的唯一位置。该位置称为应用程序的composition root,并且其他任何对象都不应尝试执行合成根的工作。

目标是实现dependency inversion

© www.soinside.com 2019 - 2024. All rights reserved.