繁体   English   中英

Java MVP-是否保留对Presenter对象的引用?

[英]Java MVP - holding no reference to Presenter object?

因此,我正在使用MVP模式编写第一个Java应用程序。 MVP三合会之一是单向通信,基本上,Views是只读的。

如果只有1个模型-1个演示者-1个视图,那么在创建新的演示者对象并且不在模型的“观察者”列表之外的任何地方都没有保留对它的引用会有任何回溯吗?

为了使自己清楚,这就是我通常会做的事情:

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吗?

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

有几种方法可以做到这一点,常见的模式是匿名内部类 由于那些匿名内部类仍保留对其实例化器的引用,因此不会对ResultPresenter进行垃圾收集。
另一种选择是将顶级类实例化为观察者。 在这种情况下,是否仍然引用演示者取决于观察者的实现。
最后,演示者本身可以实现观察者的界面(在思想上不知所措)。 显然,模型和视图将保留对演示者本身的引用,尽管他们将其视为观察者,并且不会被垃圾收集。

即使这样做,也仅意味着您只需要它即可设置演示文稿并将对象彼此链接,并且以后不再需要它,因此不会造成任何危害。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM