所以我正在使用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会被垃圾收集器清除吗?
答案 0 :(得分:1)
除了其他内容(比如初始化视图)之外,ResultPresenter
将实例化或实现一个或多个Observers并在“result”和“resultView”上注册它们。
然后,这些类将保留对观察者的引用并根据需要通知它们。
有几种方法可以做到这一点,共同的模式是anonymous inner classes。
由于这些匿名内部类仍然保留对其实例化器的引用,因此ResultPresenter
不会被垃圾收集
另一种选择是将顶级类实例化为观察者。
在这种情况下,它取决于观察者的实现是否仍然引用演示者
最后,演示者本身可以实现观察者的界面(思想中的一个颤抖)。显然,模型和视图会保留对演示者本身的引用,尽管他们认为它是一个观察者,并且它不会被垃圾收集。
即使它会这样,这只意味着你只需要它来设置演示文稿并将对象链接到彼此,之后不再需要它,所以不会造成任何伤害。