gpt4 book ai didi

Java MVP - 不持有 Presenter 对象的引用?

转载 作者:行者123 更新时间:2023-12-01 15:20:11 25 4
gpt4 key购买 nike

所以我正在使用 MVP 模式编写我的第一个 Java 应用程序。MVP 三元组之一是单向通信,基本上 View 是只读的。

如果只有 1 个模型 - 1 个演示者 - 1 个 View ,是否会回溯创建新的演示者对象,并且除了模型的观察者列表之外的任何地方都不保留对其的引用?

为了让自己清楚,这就是我“通常”这样做的方式:

private Result result;
private ResultPresenter resultPresenter;
public SomePresenter(SomeInterface view) {
result = new Result();
resultPresenter = new ResultPresenter(result, view.getResultView());
}

这就是我想要的方式:

private Result result;
public SomePresenter(SomeInterface view) {
result = new Result();
new ResultPresenter(result, view.getResultView());
}

其中 ResultPresenter 是结果的观察者。

主要问题是,ResultPresenter 会被垃圾收集器清除吗?

最佳答案

除其他事项外(例如初始化 View ),ResultPresenter 将实例化或实现一个或多个观察者并将它们注册到“结果”和“结果 View ”上。然后,这些类将保存对观察者的引用并根据需要通知它们。

有多种方法可以做到这一点,常见的模式是 anonymous inner classes 。由于这些匿名内部类仍然保留对其实例化器的引用,因此 ResultPresenter 将不会被垃圾收集。
另一种选择是将顶级类实例化为观察者。在这种情况下,演示者是否仍然被引用取决于观察者的实现。
最后,演示者本身可以实现观察者的接口(interface)(一想到就让人不寒而栗)。显然,模型和 View 将保存对演示者本身的引用,尽管它们将其视为观察者,并且不会被垃圾收集。

即使会,也只意味着您只需要它来设置演示文稿并将对象相互链接,之后不再需要它,因此不会造成任何损害。

关于Java MVP - 不持有 Presenter 对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044625/

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