MVC Verständnisproblem: Controller vs model.modelChanged()

QuestOfTire

Neues Mitglied
Hallo zusammen,

zu dem MVC Konzept kenne ich zwei Varianten
  • Variante_1: Nach seiner Änderung (z. B. counter++) durch einen Controller, benachrichtigt das Model über model.modelChanged() alle angemeldeten Views, die ihre Anzeige aktualisieren.
  • Variante_2: Nach seiner Änderung (z. B. counter++) durch einen Controller, benachrichtigt der Controller die View, die die Änderung angestoßen hat.

Fragen:
  1. Variante_1 erlaubt die Listener jeweils in ihrer View zu lassen und nicht in einer Controller Datei abzulegen, da jeder Listener auch nur in einer View verwendet wird. Ist von dieser (View+Listener)<->Model Struktur abzuraten?
  2. Variante_1 erlaubt das bilden von Schleifen, wenn eine View als reaktion auf eine model.modelChanged() das model ändert und wieder model.modelChanged() triggert. Lässt sich dies irgendwie unterbinden?
  3. Variante_2 scheint genau einen (vollgepackten)Controller zu brauchen, der alle Views kennt, und bei einer Änderung am Model jede View einzeln aktualisiert (wie würden sonst alle Views aktualisiert nach einer Model-änderung). Welchen Nutzen/Vorteil bietet dies gegenüber einer model.modelChanged() die alle Views triggert, woraufhin jede View sich selbst anpasst?

Variante_1 als Code-Beispiel:

Java:
package mainMethod;

import model.CounterModel;
import view.View_1;
import view.View_2;

public class TheMainMethod {
	public static void main(String args[])
	{
		CounterModel model = CounterModel.getInstance();
		View_1 firstView = new View_1();
		View_2 secondView = new View_2();
	}
}

Java:
package model;

public interface CounterModelInterface {
	// The model calls this method when a model value changes to notify all views.
	// All views implement this interface and can react to model changes by putting code in this method
	public void modelChanged();
}

Java:
public class CounterModel implements CounterModelInterface{
	private static CounterModel instance = null;
	private int counter;
	private ArrayList<CounterModelInterface> listeners;
	
	// Singleton, only one model instance will ever exist
	public static CounterModel getInstance()
	{
		if(instance == null)
		{
			instance = new CounterModel();
		}
		return instance;
	}
	
	private CounterModel()
	{
		counter = 0;
		listeners = new ArrayList<CounterModelInterface>();
	}
	
	public void incrementCounter()
	{
		counter++;
		modelChanged();
	}

	public int getCounter()
	{
		return counter;
	}
	
	// Notify all views that the model changed
	@Override
	public void modelChanged() {
		for(CounterModelInterface listener : listeners)
		{
			listener.modelChanged();
		}
	}
	
	public void addListener(CounterModelInterface listener)
	{
		listeners.add(listener);
	}
}

Java:
package view;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import model.CounterModel;
import model.CounterModelInterface;

public class View_1 extends JFrame implements CounterModelInterface, ActionListener {

	private JButton incrementButton;
	private JLabel modelChangedLabel;
	private CounterModel model;
	
	public View_1()
	{
		// Init
		super("View_1");
		incrementButton = new JButton("Increment model counter");
		modelChangedLabel = new JLabel("");
		
		// Add listeners
		incrementButton.addActionListener(this);
		
		// Add elements
		add(incrementButton);
		add(modelChangedLabel);
		
		// Add self to model as listener
		model = CounterModel.getInstance();
		model.addListener(this);
		
		setSize(800,200);
		setLayout(new GridLayout());
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	// When the model has changed a text is displayed to inform when the change happened
	@Override
	public void modelChanged() {
		SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date currentDate = new Date();
		String currentDateString = sdfDate.format(currentDate);
		
		modelChangedLabel.setText("The model was last changed at "+currentDateString);
	}

	// Button was pressed, increment the model counter
	@Override
	public void actionPerformed(ActionEvent e) {
		
		model.incrementCounter();
	}
}

Java:
package view;

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

import model.CounterModel;
import model.CounterModelInterface;

public class View_2 extends JFrame implements CounterModelInterface{

	private JLabel modelCounterLabel;
	private CounterModel model;
	
	public View_2()
	{
		// Init
		super("View_2");
		modelCounterLabel = new JLabel("");
		
		// Add elements
		add(modelCounterLabel);
		
		// Add self to model as listener
		model = CounterModel.getInstance();
		model.addListener(this);
		
		setSize(300,200);
		setLayout(new GridLayout());
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	// When the model has changed a text is displayed to show the counter value
	@Override
	public void modelChanged() {
		modelCounterLabel.setText("Model counter: " + model.getCounter());
	}
}

Gruß
Sebastian
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
M Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator Java Basics - Anfänger-Themen 8
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
A Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
1 Verständnisproblem mit Foreach Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
G Model View Controller Java Basics - Anfänger-Themen 7
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
F Viele Controller-Klassen Java Basics - Anfänger-Themen 5
C OOP Model View Controller - Prinzip Java Basics - Anfänger-Themen 6
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
K Model-View-Controller Java Basics - Anfänger-Themen 15
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben