Decorator Pattern

TJava

Bekanntes Mitglied
Hallo ich habe ein paar Fragen zum Decorator Pattern.
Java:
public abstract class Decorator implements AutoItExecutor {

	private final AutoItExecutor exec;

	public Decorator(final AutoItExecutor exec) {
		this.exec = exec;
	}
	public void run(TestSuite t, TestResult r){
		
	}

	@Override
	public void setConfiguration(AutoItConfiguration conf) {
		exec.setConfiguration(conf);
		
	}

	@Override
	public void configure(Configuration c) {
		exec.configure(c);
		
	}

	@Override
	public void run(TestCase t, TestResult r) {
		exec.run(t, r);
		
	}

	
}



Java:
public class ATestDecorator extends Decorator {

	public ATestDecorator(AutoItExecutor exec) {
		super(exec);

	}

	public void run(TestSuite t, TestResult r) {
		System.out.println("opkporkpork");

	}

}

Die Main

Java:
AutoItTestResult result = new AutoItTestResult();
		
		AutoItExecutor implalt = new AutoItExecutorImplementation(config);
		impl = new ATestDecorator(implalt);
		
		
		
		impl.run(Test1, result);
		impl.run(suite1, result);

Hoffentlich versteht ihr das irgendwie.:-D

Ich verstehe nicht warum das ganze nicht so funktioniert:

Java:
AutoItExecutor implalt = new AutoItExecutorImplementation(config);
		AutoItExecutor impl = new ATestDecorator(implalt);
				
		impl.run(Test1, result);
		impl.run(suite1, result);

Die Methode impl.run(suite1, result); ist so unbekannt.
Oder ist es egal welchen Typ das ganze hat.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Man kann auch neue hinzufügen, das ist aber nicht so richtig Sinn des Decorator-Patterns.

Die gesuchte Methode ist nicht in "AutoItExecutor" enthalten. Aber dort, wo ein "AutoItExecutor" (ob dekoriert oder nicht) verwendet werden soll, sollte er auch nur als AutoItExecutor bekannt sein, und dann kann man auch nur die Methoden aufrufen, die in AutoItExecutor stehen.

Sowas wie
ATestDecorator impl = new ATestDecorator(implalt);
impl.run(suite, result);
würde zwar gehen, aber man würde sich dann darauf verlassen, dass dort ein ATestDecorator verwendet wird, was eine vermutlich nicht zu akzeptierende Einschränkung (d.h. Festlegung auf einen konkreten Typ) sein dürfte...
 

Marco13

Top Contributor
Üblicherweise ja. Nochmal: Man KANN auch neue Methoden hinzufügen (wenn man das will, und für richtig hält), aber da man dann auf den konkreten Typ festgelegt ist, hat das nichts mehr mit der eigentlichen Intention des Decorators zu tun...
 

TJava

Bekanntes Mitglied
Weil es dann einfach ein neuer Typ ist mit den gleichnamigen Methoden?
Und würde überall im Code diese Typänderung verlangen. oder ?
 

Marco13

Top Contributor
Nicht direkt... Natürlich kann man diesen Speziellen Typ dann auch noch allgemein verwenden, aber man kann dort dann nicht mehr auf die speziellen Methoden zugreifen.

Java:
void doSomething(AutoItExecutor a)
{
    // Hier kann man alle Methoden verwenden, die
    // im Interface stehen
}

void foo()
{
    AutoItExceutor a0 = ... wird irgendwie erstellt

    a0.run(testCase, r); // Geht: Die Methode run(TestCase...) steht im Interface AutoItExecutor

    AutoItExecutor a1 = new ATestDecorator(a0);
    a1.run(testCase, r); // Geht natürlich auch

    a1.run(testSuite, r); // Geht NICHT: Die Methode run(TestSuite...) steht NICHT im Interface!

    ATestDecorator a2 = new ATestDecorator(a0);
    a1.run(testSuite, r); // Geht: Hier weiß man, dass 'a2' ein ATestDecorator ist, der diese Methode hat

    // 'a2' kann trotzdem noch an die Methode übergeben werden,
    // die ein AutoItExceutor erwartet - 'a2' IST ja (auch) ein AutoItExceutor!
    // Aber IN der Methode kann man run(TestSuite...) NICHT mehr
    // aufrufen, weil man DORT nicht mehr weiß, dass es ein 
    // ATestDecorator ist, sondern nur noch, dass es ein AutoItExecutor ist....
    doSomething(a2);
}

// Wenn man so eine Methode schreiben würde:
private void doSomethingSpecial(ATestDecorator a)
{
    // dann könnte man hier auch run(TestSuite...) aufrufen,
    // aber das Objekt, das an diese Methode übergeben wird,
    // muss dafür auch ein ATestDecorator sein. Diese
    // Methode würde dann - im Gegensatz zu 'doSomething' -
    //  nicht mehr mit jedem AutoItExceutor funktionieren,
    // sondern NUR mit dem speziellen ATestDecorator 
}

Wie gesagt: So eine spezielle Methode kann OK sein wenn man die z.B. verwenden will, um den speziellen ATestDecorator irgendwie zu konfigurieren oder so. Aber man sollte sich immer im klaren sein, dass das NUR mit dem speziellen ATestDecorator funktioniert. Wenn du gerade noch in der "Planungsphase" bist, kannst du ja überlegen, ob die run(TestSuite...) nicht vielleicht auch ins AutoItExecutor-Interface mit rein sollte...
 

TJava

Bekanntes Mitglied
Wow Danke für die super Erklärung. Ich werde es jetzt wahrscheinlich mit ins Interface aufnehmen.
Naja dann habe ich wenigsten das Pattern kennengelernt.

Vielen Dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
W GoF-Pattern im Programmierer-Alltag Java Basics - Anfänger-Themen 113
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
Dimax Erste Schritte Pattern.matcher,die Besonderheiten. Java Basics - Anfänger-Themen 12
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
F Design pattern Java Basics - Anfänger-Themen 29
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
D Design Pattern Command Java Basics - Anfänger-Themen 3
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
S Regex Pattern Java Basics - Anfänger-Themen 3
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
B Pattern für Email Liste Java Basics - Anfänger-Themen 3
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
M Methoden Pattern Matching Vokal Java Basics - Anfänger-Themen 2
agent47 Pattern split Java Basics - Anfänger-Themen 2
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
I Vertändnisfrage zu Prototype Pattern Java Basics - Anfänger-Themen 0
L Kompositum-Pattern Hilfe :O Java Basics - Anfänger-Themen 4
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Pattern Matching ohne Match-Methoden Java Basics - Anfänger-Themen 11
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
M MVC + Strategy Pattern Ansatz (mit Code) Java Basics - Anfänger-Themen 5
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
S OOP Regex Pattern Java Basics - Anfänger-Themen 2
L Pattern Matching Java Basics - Anfänger-Themen 3
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
M RegEx Pattern Matcher Java Basics - Anfänger-Themen 16
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
R Welches Design pattern Java Basics - Anfänger-Themen 10
B static und Pattern matching Java Basics - Anfänger-Themen 22
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
A Pattern und Matcher Java Basics - Anfänger-Themen 9
T Frage zu Pattern/Matcher Java Basics - Anfänger-Themen 6
D Pattern in Midi-Sequencer Java Basics - Anfänger-Themen 2
S OOP Factory Pattern Java Basics - Anfänger-Themen 2
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
M Regex-Pattern Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S Problem mit Pattern Java Basics - Anfänger-Themen 2
S Pattern.matches mit Ignore Case Java Basics - Anfänger-Themen 2
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
A Hilfe zu Pattern Java Basics - Anfänger-Themen 2
Y Pattern Java Basics - Anfänger-Themen 2
A Proxy Pattern implementieren Java Basics - Anfänger-Themen 2
N OOP MVC Pattern Java Basics - Anfänger-Themen 3
G Probleme mit Pattern und Aussagenlogik Java Basics - Anfänger-Themen 6
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
D regexp-pattern .. letzter schliff Java Basics - Anfänger-Themen 6
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
Z regexp/pattern für dateipfad Java Basics - Anfänger-Themen 5
A Factory Pattern Java Basics - Anfänger-Themen 2
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
O Erklärung für Pattern Java Basics - Anfänger-Themen 5
U Java Pattern Regex Java Basics - Anfänger-Themen 9
0 Probleme mit Pattern und Matcher Java Basics - Anfänger-Themen 5
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
S geeignetes Such Pattern Java Basics - Anfänger-Themen 6
J Zugriff mit Visitor Pattern auf eigen erstellte verk. Liste Java Basics - Anfänger-Themen 3
J Visitor Pattern Java Basics - Anfänger-Themen 4
W Observer-Pattern Java Basics - Anfänger-Themen 3
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
J Ant pattern Erklaerung Java Basics - Anfänger-Themen 4
G Aufbau MVC-Pattern Java Basics - Anfänger-Themen 6
M Pattern Matching Java Basics - Anfänger-Themen 2
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M Factory Pattern Ansatz falsch? Java Basics - Anfänger-Themen 6
Y Hilfe bei Pattern-Regexp Java Basics - Anfänger-Themen 5
U pattern Java Basics - Anfänger-Themen 2
A Pattern.matches(); Java Basics - Anfänger-Themen 14
A Problem mit Obser-Pattern Java Basics - Anfänger-Themen 2
P pattern/match Java Basics - Anfänger-Themen 2
K Probleme mit RegEx (Pattern und Matcher) Java Basics - Anfänger-Themen 2
K Regex Pattern Java Basics - Anfänger-Themen 4
G Vorteile Reflection bezüglich MVC-Pattern Java Basics - Anfänger-Themen 9
F regex pattern problem Java Basics - Anfänger-Themen 4
S Regex Pattern Problem Java Basics - Anfänger-Themen 2
G Singleton Pattern Java Basics - Anfänger-Themen 7
F Pattern und Matcher Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben