Interface klasse

guguli

Bekanntes Mitglied
Hallo zusammen,
ich habe eine klasse IntList und eine Interfaceklasse IntListVisitor. Nun möchte ich in der intList klasse eine Methode implementieren, die als übergebene Parameter von typ IntListVisitor bekommt.
Void acc(IntListVisitor visitor){}
Nun soll diese methode "im Sinne des Visitor-Patterns ein solches Objekt entgegenzunehmen." Leider ich verstehe nicht so ganz was die Methode machen soll. Kann mir einer das erklären??? THX
 
Ich weiß nicht ob ich deinen Text richtig verstanden habe, aber die Methode erwartet ein "IntListVisitor" also eine Schnittstelle, demnach kannst du der Methode, jedes Objekt einer Klasse übergeben die das Interface "IntListVisitor" Implementiert, und damit ist die Methode nicht an einen bestimmten Objekttyp gebunden .

Nehmen wir an du hast 2 klassen:

- AlteListe

- NeueListe

und beide implementieren das Interface IntListVisitor,

dann kannst du deiner Methode entweder eine Instant der Klasse AlteListe oder halt eine Istanz der Klasse NeueListe übergeben, da beide das Interface IntListVisitor implementieren.
 
Zuletzt bearbeitet:
Hi danke erst mal für dir Antwort. Ja das weiss ich. aber ich verstehe nicht was die Methode machen soll...🙂 Ich muss da nach eine anderen Klasse implementieren, die die IntListVisitor implementiert :9 also so wie du gesagt hast. Diese Klasse soll dann mit der Methode accept() die summe einer Liste berechnen.

Wieder meine Frage, was soll die Methde aVoid acc(IntListVisitor visitor){} genau machen. In der beschreibung steht nur : "im Sinne des Visitor-Patterns ein solches Objekt entgegenzunehmen." Was genau soll in dieser Methode implementiert werden???

THX
 
Nun soll diese methode "im Sinne des Visitor-Patterns ein solches Objekt entgegenzunehmen."

Steht doch schon hier ^^

Offizielle Definition des Patterns :

Das Visitor Pattern dient der Kapselung von Operationen, die es ausgeführt auf Elementen einer Objektstruktur ermöglichen, dass neue Operationen ohne Veränderung der betroffenen Elementklassen definiert werden.

Sprich kannst du damit über bereits bestehende Objekte z.B Iterieren ohne die bestehenden Konkreten Klassen zu ändern.

Deine Methode macht dann genau das , sie nimmt jedes Objekt einer Klasse entgegen welche das Interface implementiert, egal welcher art es ist, was die Methode in deinem Fall machen soll hattest du ja bereits beschrieben , sie Iteriert über die Elemente einer Liste und ermittelt so die Summe der enthaltenen Elemente.

[TIPP]Das Pattern wird oft für z.B Online Buchungen (Hotels) oder Virtuellen Reisebüros genutzt 🙂[/TIPP]

hier mal ein Beispiel von Wikipedia

Code:
Virtuelles Reisebüro[Bearbeiten]
Ein Reiseveranstalter bietet seinen Kunden verschiedene Busreisen, Ferienhäuser und Mietwagen an. Jedem Objekt sind eine Beschreibung und eine Preiskategorie für Sommer und Winter zugewiesen. Die Preise der Kategorien sind in einem Preismodul gespeichert. Bei Ferienhäusern sind darüber hinaus Bilder, bei Mietwagen technische Daten abgelegt. Sowohl die Klassen für Busreisen, Ferienhäuser und Mietwagen, als auch das Preismodul bieten eine Schnittstelle zum Empfang eines Besuchers. Das Preismodul ist außerhalb der Klassenhierarchie von Busreisen, Ferienhäusern und Mietwagen.
Ein Kunde kann sich nun eine Reise zusammenstellen. Fragt er dann nach dem Gesamtpreis, so besucht ein Besucher zunächst die interessierenden Objekte, fragt die jeweilige Kategorie ab. Für jede Kategorie verwaltet er einen lokalen Zähler. Zuletzt besucht er das Preismodul und berechnet auf Grund der dort abgelegten Preise und seiner lokal gesammelten Informationen den Gesamtpreis.
Entscheidet sich der Kunde, die Reise zu buchen, kann ein anderer Besucher eine Reisebestätigung erstellen. Dazu besucht er wieder die den Kunden interessierenden Objekte und das Preismodul. Sein lokaler Zustand besteht aus einem Dokument, das er gemäß den Informationen der Objekte gestaltet. Bei allen Objekten listet er zunächst die Beschreibung und die Preiskategorie auf, bei Mietwagen zusätzlich die technischen Daten. Beim Besuch des Preismoduls ergänzt er dann die einzelnen Beschreibungen um die konkreten Preise.
Beide Besucher übergreifen Klassenhierarchien, da sie sowohl auf der Klassenhierarchie der buchbaren Reiseelemente als auch auf dem Preismodul arbeiten.
 
Zuletzt bearbeitet:
Also das ist meine Klasse:

Java:
public class IntList {
	private final boolean empty; // ist diese Liste leer?
	private final int value; // das erste Element dieser Liste
	private final IntList rest; // die restliche Liste ohne das erste Element

	public IntList() { // erzeuge eine neue leere Liste
		empty = true;
		value = 0;
		rest = null;
	}

	private IntList(int elem, IntList rest) {
		this.empty = false;
		this.value = elem;
		this.rest = rest;
	}

	public boolean isEmpty() {
		return empty;
	}

	public int head() {
		return value;
	}

	public IntList tail() {
		return rest;
	}

	public IntList add(int elem) {
		return new IntList(elem, this);
	}

	@Override
	public String toString() {
		if (isEmpty()) {
			return "";
		} else {
			return "" + head() + " " + tail().toString();
		}
	}
	
	void accept(IntListVisitor visitor){
		while(!isEmpty()){
			
		}
	}
}
Ich weiss nicht wie ich jetzt über die Elemnete iterieren kann 🙁 ... Ich meine ich würde for benutzen aber hab ja die Länge der Liste nicht 🙁??
 

Zurück
Oben