2012-06-15 82 views
0

因此,我正在使用MVP模式編寫我的第一個Java應用程序。 MVPs黑社會之一是單向溝通,基本上Views是隻讀的。Java MVP - 不參考Presenter對象?

在情況下只有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

在其他事情(如初始化視圖)中,ResultPresenter將實例化或實現一個或多個觀察者並在「結果」和「結果視圖」上註冊它們。然後這些類將保持對觀察者的引用,並根據需要通知它們。

有幾種方法可以做到這一點,有一個共同的模式是anonymous inner classes。 由於那些匿名內部類仍然保存對其實例化器的引用,所以ResultPresenter將不會被垃圾收集。
另一種選擇是將頂級類實例化爲Observers。 在這種情況下,它取決於觀察者的實現,演示者是否仍然被引用。
最後,演示者本身可以實現觀察者的界面(一個想法中的一個顫抖)。很明顯,模型和視圖會引用主持人本身,儘管他們認爲它是一個觀察者,並且它不會被垃圾收集。

即使它,那隻能意味着你只需要它來建立演示和對象鏈接到對方,並且不再需要它算賬,沒有傷害會來完成。