【问题标题】:java mvc with observable pattern具有可观察模式的 java mvc
【发布时间】:2011-12-21 08:28:45
【问题描述】:

我有 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 的值。 但是当我试图调用观察者时,它在模型中给了我一个空指针异常。 我做错了吗??

【问题讨论】:

  • 这里观察者模式的目的是什么?
  • 教授说“写一个观察者模式”;)
  • 如果你不遵循 java 标准,你的代码会非常难以阅读:static model Model=new model();应该看起来像:静态模型模型=新模型();那么当你做 model.show(); 时你就可以理解了。 System.out 有效,因为 System.out 是一个静态对象。
  • 哈哈不是因为教授让我...我正在学习如何使用 MVC

标签: java model-view-controller observer-pattern


【解决方案1】:

setObserver 永远不会被调用,所以 observernull

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

【讨论】:

  • 我应该在哪里设置 setObserver ?我不确定我应该在哪里打电话
  • 鉴于您的代码,这不是一个容易回答的问题。 Model 需要 Logger 的实例,但 Logger 需要 View 的实例,而您没有 View 的实例,因为您正在从 static void main 方法调用所有内容。似乎您需要创建View 的实例,通过View 实例创建Logger 的实例,并通过Logger 实例创建Model 的实例。
  • 谢谢你,这很有用,我在类似的线路上做了一些事情,它也很有效......谢谢你的回复......
猜你喜欢
  • 2012-07-09
  • 2012-09-02
  • 2014-05-15
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多