java mvc可观察模式

java mvc可观察模式

问题描述:

我有3个类的名称是有代表性的,我打算使这个工作在mvc模式。java 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; 
    } 

} 

我期待这个按以下顺序

视图调用模型,进而模型调用观察者和观察者的工作设置的值在视图中。 但是,当我试图调用观察者时,它在模型中给了我一个空指针异常。 我做错了什么?

+0

这里的Observer模式的目的是什么? –

+0

教授说:“写一个观察者模式”;) –

+0

当你不遵循java标准时,你很难阅读你的代码: static model Model = new model(); 应该如下所示: static Model model = new Model(); 那么当你做model.show(); System.out可以工作,因为System.out是一个静态对象。 – n3wscott

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

我应该在哪里设置setObserver?我不知道我应该拨打电话 – LostPuppy

+0

这不是一个简单的问题来回答你的代码。 'Model'需要'Logger'的一个实例,但Logger需要'View'的一个实例,并且你没有'View'的实例,因为你正在使用'static void main'方法调用所有的东西。看起来你需要创建一个'View'的实例,创建一个'Logger'的实例来传递'View'实例,并且创建一个'Model'的实例来传递'Logger'实例。 –

+0

谢谢,这很有用,我做了类似的工作,它也工作得很...谢谢你的回复... – LostPuppy