Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns?

NefetsClaxon

Mitglied
Hallo!

Ich habe mir gerade das Brücke-Pattern angeguckt. Da geht es ja, wenn ich es richtig verstanden habe, darum, dass ein Client eine Abstraktion verwendet, die dann wiederum auf die Implementierung zugreift, d. h. der Client greift auf Klassen zu, die ihm sagen, WAS er da verwendet und diese Klassen rufen wiederum andere Klassen auf, in denen das "Was" dann umgesetzt wird.

Vorteil soll sein, dass die Implementierung vollständig von dem Client verborgen bleibt.

Jetzt meine Frage: Dieses "verborgen" bleiben, bezieht sich immer darauf, dass eine Klasse A keine Methoden oder Felder einer Klasse B aufrufen kann, höchstens indirekt?

D. h. wenn ich eine Implementierung vor dem Client verberge, dann heißt dass, dass der Client die Methoden, in der die Verarbeitungslogik stattfinden, nicht direkt aufrufen kann?

Ich bin etwas verwirrt, weil hier der Client ja immer noch wissen muss, dass es die Klasse CDSpieler gibt, also muss der Client ja schon noch was von der Implementierung wissen...
 

kaoZ

Top Contributor
Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns?

Um mich auf deinen Thread zu beziehen, bedeutet es das Klassen nicht direkt miteinander Kommunizieren, sonder Schnittstellen ( Interfaces ) verwenden , so muss der Aufrufer ( Client ) nicht wissen wie etwas umgesetzt worden ist, sondern nur das , die gewünschte Methode eben durch das implementieren der Schnittstelle vorhanden ist.

Anhand von Abstrakten Klassen :
Angenommen du hast die abstrakte Klasse Medium ,von welcher als Spezialisierung z.B die Klasse CD abgeleitet wird, und nehmen wir weiterhin an die Klasse Medium bietet eine abstrakte Methode getInfo(); dann sind alle Spezialisierungen der Klasse Medium dazu gezwungen , diese Methode zu implementieren.
Wie dann die Implementierung in den einzelnen Spezialisierungen aussieht, kann dem Aufrufer vollkommen egal sein, insofern dieser mit der Abstraktion, und oder einer vorhandenen Schnittstelle arbeitet.

Anhand von Schnittstellen:
Angenommen du hast das Interface Medium, welches von der Klasse CD implementiert wird, dann weist du quasi der Klasse CD eine Rolle zu, ergo ist einen CD ein Medium, wenn nun das Interface Medium die Methode getInfo(); anbietet, muss die Klasse CD logischerweise diese Implementieren, wie dann die Implementierung aussieht, ist wie bei der Abstrakten Klasse vollkommen irrelevant, insofern der Client mit der Abstraktion , also Medium arbeitet.

Hier mal vollkommen rudimentär :

Medium.java
Java:
public interface Medium{
	String getInfo();
}

CD.java
Java:
public class CD implements Medium{

	private String title;

	public CD(String t){
		title = t;
	}
	
//	hier wird die implementierung geliefert
	@Override
	public String getInfo(){
		return title;
	}
}

Client.java
Java:
public class Client{

	Medium medium;
	
	
	public Client(){}
	
	public void setMedium(Medium m){
		medium = m;
	}
		
	public static void main(String[] args){
		 Client c = new Client();
		 
		 c.setMedium(new CD("hello world revival"));
		 
//		 hier mit default Zugriffsmodifizierer ! ACHTUNG KAPSELLUNG !
		 System.out.println(c.medium.getInfo());
	}
}

Hier arbeitet der "Client" mit der Schnittstelle "Medium", dem Client ist vollkommen egal ob das Medium nun eine CD, ein USB Stick oder ein HDD ist, alle diese ggf. vorhandenen Spezialisierungen liefern insofern sie die Schnittstelle Medium erfüllen eine eigene Implementierung der Methoden getInfo();.

D. h. wenn ich eine Implementierung vor dem Client verberge, dann heißt dass, dass der Client die Methoden, in der die Verarbeitungslogik stattfinden, nicht direkt aufrufen kann?

Das heißt konkret das der Client nicht wissen muss wie etwas geschieht, sondern nur das es möglich ist dies auszuführen.

Gern auch als "It's Magic" bezeichnet ^^

Ähnlich kannst du dir z.B das Movement bei einer Spieleengine vorstellen, dir ist egal wie dein Character sich letzten endes Bewegt, du weißt als "Client" nur was du aufrufen musst das er sich bewegt, wie das dann Implementiert ist ist dir / kann dir vollkommen egal sein .
 
Zuletzt bearbeitet:

NefetsClaxon

Mitglied
Super, vielen Dank schon mal!

Was mir noch nicht genau klar ist. Wann "kennt" eine Klasse zu viel von einer anderen? Ich meine, wenn ich von einer Klasse eine Methode aufrufe, dann weiß ich ja auch nicht, was da intern passiert. Ich wieß nur, die Klasse hat diese Methode und erwartet die und die Parameter.

Dass man abstrakte Klasse und Interfaces wegen der Austauschbarkeit verwendet, okay, aber das mit dem "die Klasse kennt das 'wie'" ist mir noch nicht ganz klar. Ich sehe ja eigentlich nie, was in einer Methode direkt passiert...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Was bedeutet das @Override? Java Basics - Anfänger-Themen 1
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
S Was bedeutet ungleich (in diesem Zusammenhang)? Java Basics - Anfänger-Themen 2
S Was bedeutet das Zeichen := Java Basics - Anfänger-Themen 9
H Was bedeutet das: [I@7d4991ad? Java Basics - Anfänger-Themen 20
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
O Was bedeutet das hier 999_983? Java Basics - Anfänger-Themen 2
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
R Was bedeutet -1 Java Basics - Anfänger-Themen 2
V OOP Was bedeutet das "aBruch" Java Basics - Anfänger-Themen 6
U Was bedeutet $@ in der Linux Kommandozeile Java Basics - Anfänger-Themen 3
dave253 Was bedeutet (String args[])? Java Basics - Anfänger-Themen 6
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
V Was bedeutet das? Java Basics - Anfänger-Themen 4
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
Y Was bedeutet "this" ohne dem Punkt und dem Atrributnamen danach? Java Basics - Anfänger-Themen 2
M was bedeutet setEnabled Java Basics - Anfänger-Themen 12
F Was bedeutet '@'? Java Basics - Anfänger-Themen 3
F Frage von einem Neuling: Was bedeutet Scanner scanner ? Java Basics - Anfänger-Themen 5
K Schlüsselworte Was bedeutet oder was ist die SIGNATUR?? Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
A Was bedeutet der Operator *= ? Java Basics - Anfänger-Themen 2
N Was bedeutet << Java Basics - Anfänger-Themen 5
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
J Was bedeutet This. ? Java Basics - Anfänger-Themen 4
S Was bedeutet dieser ausdruck? Java Basics - Anfänger-Themen 9
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
J Was bedeutet dieses a [i].length? Java Basics - Anfänger-Themen 3
D Was bedeutet < > Java Basics - Anfänger-Themen 4
D Was bedeutet das ?: Java Basics - Anfänger-Themen 9
B Was bedeutet static<T>?? Java Basics - Anfänger-Themen 6
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
php1 Was bedeutet der Modifier static ? Java Basics - Anfänger-Themen 3
K Was bedeutet das eigentlich.... Java Basics - Anfänger-Themen 18
G Was bedeutet? Java Basics - Anfänger-Themen 7
G Was bedeutet charAt()? Java Basics - Anfänger-Themen 5
J Was bedeutet der Doppelpunkt ":" ? Java Basics - Anfänger-Themen 3
G was bedeutet //TODO Java Basics - Anfänger-Themen 4
A Was bedeutet folgende Programmcodezeile genau Java Basics - Anfänger-Themen 6
B was bedeutet "this" Java Basics - Anfänger-Themen 8
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
K was bedeutet '?' Java Basics - Anfänger-Themen 3
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
S was bedeutet Typisiert? Java Basics - Anfänger-Themen 3
D Was bedeutet : ? Java Basics - Anfänger-Themen 4
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
H Was bedeutet "class Liste<E>" Java Basics - Anfänger-Themen 2
J was bedeutet null Java Basics - Anfänger-Themen 7
padde479 Compiler-Frage: Was bedeutet deprecated? Java Basics - Anfänger-Themen 4
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29
G indexOf() - was bedeutet -1 ? Java Basics - Anfänger-Themen 27
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
G setName bei JTextfield. Was bedeutet das? Java Basics - Anfänger-Themen 7
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
D was bedeutet " Seiteneffekt " ? Java Basics - Anfänger-Themen 4
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben