Java MVP - 没有引用Presenter对象?

时间:2012-06-15 04:32:40

标签: java reference mvp

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

如果只有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会被垃圾收集器清除吗?

1 个答案:

答案 0 :(得分:1)

除了其他内容(比如初始化视图)之外,ResultPresenter将实例化或实现一个或多个Observers并在“result”和“resultView”上注册它们。 然后,这些类将保留对观察者的引用并根据需要通知它们。

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

即使它会这样,这只意味着你只需要它来设置演示文稿并将对象链接到彼此,之后不再需要它,所以不会造成任何伤害。