MVC - два класса с одинаковыми ссылками в контроллере - PullRequest
0 голосов
/ 28 ноября 2018

Я искал и не могу найти решение.У меня есть два представления, один контроллер, одна модель и класс 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, который затем я могу использовать позже в своем классе контроллера для выполнения методов в viewclass, выбранном пользователем

1 Ответ

0 голосов
/ 28 ноября 2018

Я не знаю, что ты собираешься делать.Но в соответствии с вашим вопросом вы хотите получить доступ к той же самой переменной представления из контроллера, поэтому вам нужно следовать этому.Для этого вам нужен интерфейс.

Объявите общий интерфейс

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).

...