Skip to content
On this page
4. Model View Controller
1

Model - View - Controller

Objektorientierte Programmierung 2

24.02.2023
4. Model View Controller
2

MVC Intro

MVC ist ein Pattern, welches bei GUI eingesetzt wird. Ziel ist es, Applikationen zu strukturieren, um auch bei komplexeren Zusammenhängen den Überblick zu behalten.

24.02.2023
4. Model View Controller
3

View

Die View ist für das Darstellen des GUI verantwortlich.

  • Layout handeln
  • Zustand des Models für den User darstellen
  • Events an Controller weitergeben

Die View ändert das Model nie!

24.02.2023
4. Model View Controller
4

Controller

Der Controller ist das Zwischenstück zwischen Model und View. Er handelt Events und den Zustand der Applikation. Auch pflegt er das Model und kann das Model ändern.

24.02.2023
4. Model View Controller
5

Model

Das Model ist der Datenuntersatz für die View und den Controller. Es ist vom Rest der Applikation unabhängig und sollte immer testbar sein.

  • Das Model weiss nichts von der View
  • Das Model weiss nichts von AWT / Swing
  • Das Model weiss nichts vom Controller
24.02.2023
4. Model View Controller
6

Observable Model

Ein Model, welches Obervable ist, informiert Observer über Änderungen.

24.02.2023
4. Model View Controller
7

Beispiel: Roll the Dice

24.02.2023
4. Model View Controller
8

Model

java
public class Model {

	public int number = 0;

	public void roll() {
		number = (int) (Math.random() * 6) + 1;
	}
}
24.02.2023
4. Model View Controller
9

Controller

java

public class Controller {

	private Model model;
	private MainPanel view;

	public Controller(Model model) {
		this.model = model;
	}

	public void install(MainPanel view) {
		this.view = view;
	}

	public void roll() {
		model.roll();
		view.update(model);
	}

}
24.02.2023
4. Model View Controller

View

10
java
public class MainPanel extends JPanel {
	private Controller controller;
	public MainPanel(Controller controller) {
		this.controller = controller;
	}

	JLabel resultat = new JLabel(" - ");
	JButton button = new JButton("ROLL");

	private final Insets insets = new Insets(15, 15, 15, 15);

	public void init() {
		setLayout(new GridBagLayout());
		resultat.setBackground(Color.DARK_GRAY);
		resultat.setForeground(Color.WHITE);
		resultat.setOpaque(true);
		add(resultat, new GridBagConstraints(0, 0, 1, 1, 0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE,
				insets, 0, 0));
		add(button, new GridBagConstraints(0, 1, 1, 1, 0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, insets, 0, 0));
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				controller.roll();
			}
		});
		invalidate();
	}
	public void update(Model model) {
		resultat.setText(" " + model.number + " ");
	}
}
24.02.2023
4. Model View Controller
11

App

java
// ... main

final Model model = new Model();
final Controller controller = new Controller(model);
final MainPanel view = new MainPanel(controller);
controller.install(view);

JFrame frame = new JFrame("Roll the Dice");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

view.setPreferredSize(new Dimension(250, 250));
view.setDoubleBuffered(true);
frame.add(view);

// ...
24.02.2023