【问题标题】:MVP - hide view methods from client codeMVP - 从客户端代码中隐藏视图方法
【发布时间】:2017-03-31 10:47:15
【问题描述】:

在使用 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()

【问题讨论】:

    标签: java


    【解决方案1】:

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

    // 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
    }
    

    现在我将m_view 传递给Presenter 而不是this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多