2011-11-03 111 views
-1

我有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

回答

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

我應該在哪裏設置setObserver?我不知道我應該撥打電話 – LostPuppy

+0

這不是一個簡單的問題來回答你的代碼。 'Model'需要'Logger'的一個實例,但Logger需要'View'的一個實例,並且你沒有'View'的實例,因爲你正在使用'static void main'方法調用所有的東西。看起來你需要創建一個'View'的實例,創建一個'Logger'的實例來傳遞'View'實例,並且創建一個'Model'的實例來傳遞'Logger'實例。 –

+0

謝謝,這很有用,我做了類似的工作,它也工作得很...謝謝你的回覆... – LostPuppy