MVC-控制器中两个具有相同引用的类

时间:2018-11-28 13:57:17

标签: java model-view-controller factory

我一直在搜索,但似乎找不到解决方法。我有两个视图,一个控制器,一个模型,以及一个Factory类。但是,该模型在此问题中并不重要。

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

 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);
    }  
}

然后在控制器类中进一步做类似的事情:

v.updateGui(String text);

因此,根据是调用SetViewSwing还是调用SetViewKonsoll,我想将类分配给v,然后可以在以后的控制器类中使用它来执行{{1 }}用户选择了

1 个答案:

答案 0 :(得分:0)

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

声明一个通用接口

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

然后,您必须为两个具体的视图类实现此接口

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

    }

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

和另一个班

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)