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