OOP Model View Controller - Prinzip

chuvak

Aktives Mitglied
Ich bin dabei, eine einfache Anwendung nach dem Model-View-Controller-Prinzip zu erstellen.

Es soll einen "Ticket-Automaten" darstellen, wo man Tickets für Kinder und Erwachsene kaufen kann.

Controller: Es gibt je einen Button, mit der man die Tickets pro Altersgruppe bestellen kann. Deren Anzahl wird in Textfeldern angezeigt.
View: 2 Instanzen vom Controller + eigene Steuerelemente (nochmal die Daten aus den Controllern und die Gesamtanzahl der Tickets (Summe der beiden Controller).

Da die Controller unabhängig voneinander funktionieren (sie kennen sich nicht), müssen deren Inhalte irgendwo an einer zentralen Stelle gespeichert werden (Model?).

Jetzt weiß ich leider nicht, wie ich das realisieren soll. Ich denke, die Modelklasse muss eine Beobachterrolle einnehmen und soll die Ergebnisse speichern, wenn bei einem der Controller ein Button gedrückt wird. Die beiden Instanzen der Controller muss sie auch irgendwie unterscheiden können.

Kann mir bitte jemand helfen?
 

Anhänge

  • MVC.gif
    MVC.gif
    26,2 KB · Aufrufe: 60
  • Main.java
    395 Bytes · Aufrufe: 9
  • View.java
    1 KB · Aufrufe: 8
  • Controller.java
    1,2 KB · Aufrufe: 8
G

Gast2

Gast
Von meiner Perpektive aus sollte der Controller keine GUI elemente enthalten.

Sondern jedes GUI Element hat für das Handling der EVents eine Refenrez auf einen Controller der die Aktion verarbeitet. Der Controller selber operiert dann auf dem Datenmodel.


Dösiges Beispiel an dem sich viel kritisieren ließe - aber es verdeutlicht das Prinzip:

Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class JFrameTest extends JFrame{

	public JFrameTest(){
		// add some values to the data model:
		final DataModel model = new DataModel();
		final ClickController addController = new AddController(model);
		final ClickController delController = new DelController(model);
		final JPanel panel = new JPanel();
		
		final JButton addButton = new JButton("Add value");
		panel.add(addButton);
		addButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				addController.handleEvent("blabliblu");
			}
		});
		
		final JButton delButton = new JButton("Delete value");
		panel.add(delButton);
		delButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				delController.handleEvent("blabliblu");
			}
		});
		
		this.add(panel);
		this.pack();
	}
	
	public static void main(String[] args) {
		JFrameTest a = new JFrameTest();
		a.setSize(new Dimension(100,100));
		a.setVisible(true);
	}
	
	static interface ClickController{
		void handleEvent(String s);
	}
	static class AddController implements ClickController{

		private DataModel model;
		
		public AddController(DataModel model){
			this.model = model;
		}
		@Override
		public void handleEvent(String s) {
			model.addString(s);
			
		}
		
	}
	
	static class DelController implements ClickController{
		private DataModel model;
		
		public DelController(DataModel model){
			this.model = model;
		}

		@Override
		public void handleEvent(String s) {
			model.delString(s);
			
		}
		
	}
	
		
	static class DataModel {

		private List<String> values;

		public DataModel(){
			values = new ArrayList<String>();
		}
		
		public void addString(String s){
			System.out.println("Adding "+s);
			values.add(s);
		}
		
		public void delString(String s){
			System.out.println("Removing "+s);
			values.remove(s);
		}
	}
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
Controller: Es gibt je einen Button, mit der man die Tickets pro Altersgruppe bestellen kann. Deren Anzahl wird in Textfeldern angezeigt.
View: 2 Instanzen vom Controller + eigene Steuerelemente (nochmal die Daten aus den Controllern und die Gesamtanzahl der Tickets (Summe der beiden Controller).
Das entspricht jetzt nicht unbedingt dem MVC. Bei diesem Entwurfsmuster spielt der Controller eine zentrale Rolle. Mag sein, dass es Fälle gibt in denen man mit mehreren Controllern arbeitet (macht in Deinem Fall aber keinen Sinn), diese werden dann aber wieder durch einen Controller verwaltet. Aber generell gilt eine View wird durch einen Controller verwaltet. Ein Controller kann aber eine oder mehrere Views verwalten (1:n Beziehung)
Ich denke, die Modelklasse muss eine Beobachterrolle einnehmen
Beim MVC Pattern wird das Modell beobachtet. In Kürze:
Controller besitzt eine Referenz auf View und Model und "beobachtet" die View
View besitzt eine Referenz auf das Model und "beobachtet" dieses
Model besitzt weder eine direkte Referenz auf View oder Controller, es kennt die View nur als "Beobachter" (falls notwendig kann man auch noch den Controller als "Beobachter" an der View registrieren)
 

chuvak

Aktives Mitglied
Beim MVC Pattern wird das Modell beobachtet. In Kürze:
Controller besitzt eine Referenz auf View und Model und "beobachtet" die View
View besitzt eine Referenz auf das Model und "beobachtet" dieses
Model besitzt weder eine direkte Referenz auf View oder Controller, es kennt die View nur als "Beobachter" (falls notwendig kann man auch noch den Controller als "Beobachter" an der View registrieren)

Genau, an Referenzen habe ich auch gedacht. Könntest du evtl. ein Beispiel nennen, wie man die Referenzen herstellt, bzw Klassen registriert?
 

Michael...

Top Contributor
Genau, an Referenzen habe ich auch gedacht. Könntest du evtl. ein Beispiel nennen, wie man die Referenzen herstellt, bzw Klassen registriert?
Referenzen erstellt man nicht Referenzen hält man ;-) - in Variablen.
Hier mal ein kurz und knapp Bsp.
PseudoController hält eine Referenz auf den JButton (View) in der Instanzvariablen button und registriert sich gleich als "Beobachter" (Zeile 6)
Java:
class PseudoController implements ActionListener {
	private JButton button;
	
	public PseudoController() {
		button = new JButton("Button");
		button.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent evt) {
		
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Model View Controller Java Basics - Anfänger-Themen 7
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
K Model-View-Controller Java Basics - Anfänger-Themen 15
K Frage zum Model View Controller Prinzip Java Basics - Anfänger-Themen 6
megachucky Model View Controller Pattern - Suche Hilfe bei Anwendung Java Basics - Anfänger-Themen 4
S Model-View-Controller Konzept Beispiel Java Basics - Anfänger-Themen 11
I Klassen Java Qt Model/View Datenhaltung Java Basics - Anfänger-Themen 4
G Einbindung von MVC (Model-View-Controll) Java Basics - Anfänger-Themen 8
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G Model mit Models füllen Java Basics - Anfänger-Themen 9
W Befüllung einer Tabelle mit Checkbox, Trennung GUI und Model Java Basics - Anfänger-Themen 5
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
C Bounded Range Model Java Basics - Anfänger-Themen 1
M Input/Output Vom Model zur Database? Java Basics - Anfänger-Themen 7
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
F MVC: Model Klasse erstellen Java Basics - Anfänger-Themen 3
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
L Eigenes List Model für Icon + String -> Speicherhungrig? Java Basics - Anfänger-Themen 8
S Forumlare nach dem MVC-Model Java Basics - Anfänger-Themen 5
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
K Problem mit Abstract Table Model Java Basics - Anfänger-Themen 5
C JTable Model - getValueAt (int) Java Basics - Anfänger-Themen 3
G JTable mit eigenen Model neu zeichnen Java Basics - Anfänger-Themen 4
L Model einer Table bekommen Java Basics - Anfänger-Themen 6
E Model und i18n bzw. Properties Java Basics - Anfänger-Themen 10
P Tabelle mit Model -> getSelectedRow Java Basics - Anfänger-Themen 4
M model übergeben? Java Basics - Anfänger-Themen 16
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
G SQL View query Java Basics - Anfänger-Themen 4
H Best Practice View probleme Java Basics - Anfänger-Themen 2
L Java Package View Java Basics - Anfänger-Themen 6
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
G Eclipse: In Problems View schreiben? Java Basics - Anfänger-Themen 10
A Datentypen Typecast im View Java Basics - Anfänger-Themen 4
A OOP MVC Frage View Java Basics - Anfänger-Themen 2
F View überwachen Java Basics - Anfänger-Themen 6
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
K JAVA HEX View! Java Basics - Anfänger-Themen 2
M Controller + View: Fehlermeldungen Java Basics - Anfänger-Themen 2
E MVC - Was darf View Java Basics - Anfänger-Themen 15
E MVC - ein View für mehrere Models Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
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
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
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben