0

所以我正在使用 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 是 Result 的观察者。

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

4

1 回答 1

1

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

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

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

于 2012-06-15T04:45:48.790 回答