MVC - 两个 类 在 Controller 中具有相同的引用

MVC - Two classes with same reference in Controller

我一直在搜索,但似乎找不到解决方案。我有两个视图,一个控制器,一个模型和一个工厂 class。但是模型在这个问题中并不重要。

我希望能够根据用户的选择对两个 class 使用相同的变量名。例如:

 public class Controller  {

    public Controller(){    
        m = new Model();    
    }

     //This method is called from Factory
     /*Only one of these two will be called SetViewSwing() or SetViewKonsoll()*/
    public void SetViewSwing(){
        v = new View(this);
    }

    public void SetViewKonsoll(){
        v = new ViewKonsoll(this);
    }  
}

然后在控制器中进一步往下 class 我可以做类似的事情:

v.updateGui(String text);

因此,取决于是调用 SetViewSwing 还是调用 SetViewKonsoll 我想将 class 分配给 v,稍后我可以在我的控制器中使用它 class 执行 viewclass 用户选择

中的方法

我不知道你要做什么。但是根据你的问题,你想从控制器访问相同的视图变量,所以你需要遵循这个。为此你需要一个接口。

声明一个公共接口

public interface CommonView {
    void updateGui(String text);
}

然后你必须为具体视图实现这个接口classes

public class View implements CommonView {
    public View(ViewController viewController) {

    }

    @Override
    public void updateGui(String text) {
        System.out.println("Swing View");
    }
}

还有一个class

public class ViewKonsoll implements CommonView {

    public ViewKonsoll(ViewController viewController) {

    }

    @Override
    public void updateGui(String text) {
        System.out.println("KonsolView");
    }
}

然后在Controller中你可以这样定义

public class ViewController {
    Model m;
    CommonView v;
    ViewController(){
        m = new Model();
    }


    public void SetViewSwing(){
        v = new View(this);

    }

    public void SetViewKonsoll(){
        v = new ViewKonsoll(this);

    }
}

然后您可以从您的控制器或任何地方设置视图并调用 v.updateGui(String text)