MVP - 从客户端代码隐藏视图方法

时间:2017-03-31 10:47:16

标签: java

在使用Model-View-Presenter模式时,我经常发现自己处于以下场景:

// PACKAGE A
// pacakge private
interface View
{
    void methodForPresenter();
}

public class ViewImpl implements View
{
    @Override
    public void methodForPresenter() {}

    public void methodForClient() {}
}

// PACKAGE B
// client code example
void main()
{
    ViewImpl view = new ViewImpl();
    view.methodForClient(); // ok
    view.methodForPresenter(); // not ok - should not be used
}

有没有办法如何将包含演示者的方法隐藏在包内?由于某种原因,视图接口是包私有的,但由于java中的所有重写接口方法都必须是公共的,所以我不知道如何从客户端代码中隐藏methodForPresenter()

1 个答案:

答案 0 :(得分:0)

我找到了一个使用匿名内部类和组合的解决方案:

long number = 12349874529768521;
string result = BaseN.Encode(number);

现在我将// PACKAGE A // pacakge private interface View { void methodForPresenter(); } public class ViewImpl { private m_view = new View() { @Override public void methodForPresenter() {} } public void methodForClient() {} } // PACKAGE B // client code example void main() { ViewImpl view = new ViewImpl(); view.methodForClient(); // ok view.methodForPresenter(); // now an error } 传递给Presenter而不是m_view