具有可观察模式的javamvc
我有3个类,它们的名称是有代表性的,我打算在mvc模式中实现这一点 以下是课程具有可观察模式的javamvc,java,model-view-controller,observer-pattern,Java,Model View Controller,Observer Pattern,我有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
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的值。
但是当我试图调用观察器时,它在模型中给了我一个空指针异常。
我做错什么了吗???
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();
}
}
我应该在哪里设置setObserver??我不确定我应该在哪里打电话。考虑到你的代码,这不是一个容易回答的问题
Model
需要一个Logger
的实例,但是Logger
需要一个View
的实例,并且您没有View
的实例,因为您正在从静态void main
方法调用所有内容。似乎您需要创建一个视图
的实例,创建一个记录器
传递视图
实例的实例,以及创建一个模型
传递记录器
实例的实例。谢谢您,这很有用,我在类似的行中做了一些事情,它也起到了作用。。。谢谢你的回答…观察者模式的目的是什么?教授说“写一个观察者模式”;)当您不遵循java标准时,阅读代码是非常困难的:静态模型=新模型();应该如下所示:静态模型=新模型();然后,当您执行model.show()时,您就有了意义;因为System.out是一个静态对象,所以System.out可以工作。哈哈,不是因为教授让我。。。我正在学习如何使用MVC