java mvc с наблюдаемым шаблоном

#java #model-view-controller #observer-pattern

#java #model-view-controller #наблюдатель-шаблон

Вопрос:

У меня есть 3 класса, имена которых являются репрезентативными, и я намерен сделать эту работу в шаблоне mvc.

Ниже приведены классы

 public class view  {

 static int n;
 static model Model=new model();
    public static void main(String args[]){

        Model.show(5);
        System.out.println("The value is " n);
    }

}




public class model {

    public interface Observer{
        public void show(int n);
    }

    protected Observer observer;
    public void setObserver(Observer observer) {
        this.observer = observer;
    }

    public void show(int n)
    {
        System.out.println(n 1);
        observer.show(5);
    }


}



public class Logger implements model.Observer {

    private view View;

    public Logger(view View) {
        this.View= View;
    }

    public void show(int n)
    {
        View.n=n;
    }

}
  

Я ожидал, что это будет работать в следующем порядке

представление вызывает модель, а модель, в свою очередь, вызывает наблюдателя, и наблюдатель устанавливает значение n в представлении. Но это дает мне исключение нулевого указателя в модели, когда я пытаюсь вызвать наблюдателя. Я делаю что-то не так??

Комментарии:

1. Какова цель шаблона наблюдателя здесь?

2. Профессор сказал: «напишите шаблон наблюдателя» 😉

3. Очень сложно читать ваш код, если вы не следуете стандартам Java: статическая модель Model=new model(); должно выглядеть так: статическая модель model=new Model(); тогда вы можете иметь смысл, когда вы делаете model.show(); System.out работает, потому что System.outявляется статическим объектом.

4. ха-ха-ха, не потому, что профессор попросил меня… Я учусь обходиться с MVC

Ответ №1:

setObserver никогда не вызывается, так observer и есть null .

 public class view  {

  static int n;
  model Model;

  private View(){
     Logger logger = new Logger(this);
     Model = new model();
     Model.setObserver(logger);
  }

  private void doIt(){

    Model.show(5);
    System.out.println("The value is " n);
  }

  public static void main(String args[]){
      new View().doIt();
  }
}
  

Комментарии:

1. где я должен установить setObserver ?? Я не уверен, куда мне следует позвонить

2. Учитывая ваш код, ответить на этот вопрос непросто. Model нужен экземпляр Logger , но Logger нужен экземпляр View , а у вас нет экземпляра View , так как вы вызываете все из static void main метода. Похоже, вам нужно создать экземпляр View , создать экземпляр Logger передачи View экземпляра и создать экземпляр Model передачи Logger экземпляра.

3. Спасибо , что было полезно, и я сделал кое- что в том же духе, и это тоже сработало … спасибо за ваши ответы …