Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, hab da eine Frage zum Model-View-Controller Prinzip:
Ich habe 3 Klassen in 3 verschiedenen Packages + die Klasse mit der main,
wobei zu jeder Klasse noch jeweils das Interface dazu kommt. Die lass ich
wegen der besseren Übersich weg:
Java:
import view.View;
import controller.Controller;
public class MVCMain {
public static void main(String[] args) {
Controller controller = new Controller();
View view = new View();
controller.start();
controller.probe();
view.probe();
Java:
package controller;
import model.Model;
public class Controller implements ControllerInterface {
Model model = new Model();
public Controller() {
}
public void start() {
model.setX(3);
model.setY(4);
System.out.println(model.getX());
System.out.println(model.getY());
}
public void probe() {
System.out.println(model.getX());
System.out.println(model.getY());
}
}
Java:
package model;
public class Model implements ModelInterface {
int x = 1;
int y = 2;
public Model() {
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
Java:
package view;
import controller.Controller;
public class View implements ViewInterface {
Controller controller = new Controller();
public View() {
}
public void probe() {
controller.probe();
}
}
Mein Problem ist, wenn ich das Programm ausführe, bekomm ich folgende Ausgabe:
3
4
3
4
1
2
obwohl ich dieselbe Methode aufrufe, bekomm ich also ein anderes Ergebnis.
Ich wüsste gerne woran das liegt und wie ich es ändern kann.
Deine View Klasse erzeugt ein komplett neues Controller Objekt, welches wiederum ein komplett neues Model Objekt erzeugt, wo der Startwert bei 1 und 2 liegt. Du müssten also in der probe-Methode von der Viewklasse vorher noch controller.start(); aufrufen, um ein 3,4 Ergebnis zu erzielen.
Ok, das versteh ich. Aber wie kann ich denn von der Viewklasse auf das Objekt zugreifen, dass die Controllerklasse erzeugt hat oder ist das nicht möglich?
Du könntest das Controller Objekt, welches Du in der main erzeugst an die View per Konstrukter übergeben und über die Referenz die probe Methode aufrufen.