Hey Leute!
Ich habe mal eine Frage zu oben genannten Design pattern...
In wikipedia steht u.a.. dass der View auch das Model (/die Models) kennen muss?!
Stimmt das so? Ich habe im Netz eine IMplementierung gefunden, die das anders macht, aber dennoch reibungslos funktioniert:
Hier agieren die Klassen so, wie es hier zB steht: http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf (siehe Bild 1. Seite).
In Wikipedia Model View Controller ? Wikipedia ist die Skizze aber eine andere??
Was ist denn richtig?
Oder gibt es verschiedene Arten dies zu implementieren?
Danke!
Ich habe mal eine Frage zu oben genannten Design pattern...
In wikipedia steht u.a.. dass der View auch das Model (/die Models) kennen muss?!
Stimmt das so? Ich habe im Netz eine IMplementierung gefunden, die das anders macht, aber dennoch reibungslos funktioniert:
Java:
public class Wind extends Observable {
private Direction dir = Direction.NORTH;
private int speed = 0;
/**
* @return Returns the dir.
*/
public Direction getDir() {
return dir;
}
/**
* @param dir The dir to set.
*/
public void setDir(Direction dir) {
this.dir = dir;
setChanged();
notifyObservers(this);
}
/**
* @return Returns the speed.
*/
public int getSpeed() {
return speed;
}
/**
* @param speed The speed to set.
*/
public void setSpeed(int speed) {
this.speed = speed;
setChanged();
notifyObservers(this);
}
}
public class WindViewer extends JFrame implements Observer {
private WindController controller;
private JLabel direction;
private JLabel speed;
private JPanel buttonPanel;
private JPanel mainPanel;
public WindViewer(WindController controller) {
super("WindViewer");
this.controller = controller;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
init();
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
buttonPanel = new JPanel();
mainPanel = new JPanel();
direction = new JLabel();
speed = new JLabel();
mainPanel.add(new JLabel("Direction: "));
mainPanel.add(direction);
mainPanel.add(new JLabel("Speed: "));
mainPanel.add(speed);
getContentPane().add(mainPanel);
JButton button = new JButton("Change Direction");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
controller.changeDirection();
}
});
buttonPanel.add(button);
button = new JButton("Change Speed");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
controller.changeSpeed();
}
});
buttonPanel.add(button);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
}
/*
* (non-Javadoc)
*
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
public void update(Observable arg0, Object arg1) {
Wind wind = (Wind) arg1;
direction.setText(wind.getDir().toString());
speed.setText(String.valueOf(wind.getSpeed()));
}
}
public class WindController {
private Wind wind;
public WindController() {
WindViewer viewer = new WindViewer(this);
wind = new Wind();
wind.addObserver(viewer);
}
public void changeDirection() {
Direction[] dir = Direction.values();
wind.setDir(dir[(int) (Math.random() * 4)]);
}
public void changeSpeed() {
wind.setSpeed((int) (Math.random() * 100));
}
public static void main(final String[] args) {
Runnable gui = new Runnable() {
@Override
public void run() {
new WindController();
}
//GUI must start on EventDispatchThread:
SwingUtilities.invokeLater(gui);
}
}
Hier agieren die Klassen so, wie es hier zB steht: http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf (siehe Bild 1. Seite).
In Wikipedia Model View Controller ? Wikipedia ist die Skizze aber eine andere??
Was ist denn richtig?
Oder gibt es verschiedene Arten dies zu implementieren?
Danke!