GoF-Pattern im Programmierer-Alltag

LimDul

Top Contributor
Man muss trennen zwischen dem Objekt, was einer Variablen zugewiesen ist und dem Typ der Variablen


Java:
List list = new ArrayList();

Der Typ der Variable ist List. Das Objekt da drin ist aber eine ArrayList. In den weiteren Zeilen kannst du nur auf Methoden zugreifen, die von List definiert sind.

Betrachte es Brille, die du aufsetzt. Du betrachtest das Objekt durch die Brille "List" und siehst es nur noch List - alles andere wird beim Blick drauf ausgefiltert.
 

Wuast

Bekanntes Mitglied
Man muss trennen zwischen dem Objekt, was einer Variablen zugewiesen ist und dem Typ der Variablen


Java:
List list = new ArrayList();

Der Typ der Variable ist List. Das Objekt da drin ist aber eine ArrayList. In den weiteren Zeilen kannst du nur auf Methoden zugreifen, die von List definiert sind.

Betrachte es Brille, die du aufsetzt. Du betrachtest das Objekt durch die Brille "List" und siehst es nur noch List - alles andere wird beim Blick drauf ausgefiltert.
Ahhhh... BING! 💡
also habe ich
Java:
public class Worker {

    private String profession;
    private String name;
    private String tools;
    
    // ...
    
    //use interface as instance variable
    SkilledOrNotInterface skilledOrNot;
    
    public String getSkilledOrNot() {
        return skilledOrNot.skillSetup();
    }
    
    //let strategy pattern be dynamic:
    public void setSkilledOrNot(SkilledOrNotInterface skilledOrNot) {
        this.skilledOrNot = skilledOrNot;
    }
}

hier eine Variable vom Typ des

Code:
public interface SkilledOrNotInterface {
    String skillSetup();   
}

und über den Setter wird das Objekt zur dem, was ich übergebe - also entweder

Code:
public class CodingSkills implements SkilledOrNotInterface {
    @Override
    public String skillSetup() {
        return "I can code!";
    }
}
oder eben das Pendant dazu?! :) Und deswegen kann ich dann auch den Zustand von Objekten dynamisch zur Laufzeit entsprechend ändern. Ich glaube, jetzt hab ich es geschnallt.. (oder?)
 
Y

yfons123

Gast
Wenn die Sprache oder das Framework irgend ein Pattern
warum sollte ich einen umständlichen builder in c# bauen wenn ich properties bzw init properties hab mit dem property initializer? warum soll ich mir die arbeit machen wenn ich es schon in der sprache habe das ziel leichter zu erreichen
 

KonradN

Super-Moderator
Mitarbeiter
Die Init Properties sind nur eine andere Syntax für das Builder Pattern. Daher ist Deine Aussage Quatsch.

Das Builder Pattern ist so wichtig, dass es sogar eine vereinfachte Syntax dafür gibt. Aber es ist das Pattern.

Ebenso nutzt man dieses Pattern, wenn man einfach @Builder vor die Datenklasse setzt in Java mit Lombok.
 
Y

yfons123

Gast
und warum sollte ich den "traditionellen" builder schreiben mit extra klasse usw wenn ich die vereinfachungen schon habe

gibt keinen grund das rad neu zu erfinden
 

KonradN

Super-Moderator
Mitarbeiter
und warum sollte ich den "traditionellen" builder schreiben mit extra klasse usw wenn ich die vereinfachungen schon habe

gibt keinen grund das rad neu zu erfinden
a) hat das niemand behauptet. Es geht um die Verwendung des Patterns. Und natürlich nutzt Du das Builder-Pattern, wenn Du etwas hast wie:
C#:
var s = new Student()
{
    FirstName = "Jared",
    LastName = "Parosns",
};

// Mit FirstName / LastName init Properties

Es geht nicht darum, irgendwas selbst zu schreiben. Es ist normal, dass man immer weniger selbst schreiben muss, weil einem vieles generiert wird. Es geht um ein einfaches Grundverständnis! Man sollte schon verstehen, was man da eigentlich macht! Fehlt Dir dieser Überblick? Das .Net Framework macht irgend welche tollen magischen Dinge und Du freust Dich, dass da was zu gehen scheint? Sorry, aber da fehlt mir das Verständnis.

b) Diese "abgespeckten Builder" reichen nicht immer aus. Der traditionelle Builder sammelt die Daten um dann z.B. einen Konstruktor mit allen Argumenten aufzurufen. Damit kann eine Validierung der Werte statt finden. Diese Möglichkeit hast Du da nicht oder nicht so einfach.

Also so typische Dinge wie: Die Validierung von a benötigt den Wert von b. Also mal ein Beispiel aus den Fingern gesaugt: eine Frühverrentung geht nur, wenn Du eine Invalidität vorweisen kannst. Oder wenn Du einen Wert für A setzt, musst Du auch einen Wert für B setzen. Das haut da alles nicht hin.

Wenn Du eine vernünftige Validierung einer Instanz brauchst (bei der Erstellung), dann ist ein vollwertiger Builder wichtig. Und so ein einfaches Sprachfeature reicht dann eben nicht aus.
 

mihe7

Top Contributor
Und deswegen kann ich dann auch den Zustand von Objekten dynamisch zur Laufzeit entsprechend ändern. Ich glaube, jetzt hab ich es geschnallt.. (oder?)
Ja, wobei die Formulierung
und über den Setter wird das Objekt zur dem, was ich übergebe
nicht richtig ist.

Die Instanzvariable ist kein Objekt, sondern speichert eine Referenz auf ein Objekt. Durch den Setter wird also die mit dem Parameter übergebene Objektreferenz in der Instanzvariablen abgelegt. Der Typ der Instanzvariablen ändert sich dadurch nicht.
 

Wuast

Bekanntes Mitglied
Hallöchen,
mal wieder eine kurze Rückfrage zu einem Design-Pattern. Konkret dem StatePattern.

Ich habe ein Interface (oder ein abstrakte Klasse), welches ich dann implementiere (oder erben lasse) von den Zustandsklassen. Dadurch hat dann ja jede "spezielle Zustandsklasse" alle Methoden des Interfaces. Macht es Sinn, nur die passenden zu überschreiben und die übrigen nicht anzurühren, oder über die übrigen Pattern eine Art Exception auszugeben, oder die passende Interface-Methode aufzurufen oder was wäre am sinnvollsten?

Also z.B. bei folgender Situation:
Java:
public interface WorkerStateInterface {

    void isSick(boolean isSick);
  
    void isAtWork(boolean isAtWork);
}

public class WorkerStateSickness implements WorkerStateInterface {

    Worker worker;
  
    WorkerStateSickness (Worker newWorker){
        this.worker = newWorker;
    }
  
    @Override
    public void isSick(boolean isSick) {
        if (isSick == true) {    //ja ich weiß, ohne den == operator ists schöner aber für den Überblick fand ich es an dieser Stelle besser
        System.out.println("Worker is sick!"); 
        }
    }


    @Override
    public void isAtWork(boolean isAtWork) {
    }

bleibt der isAtWork jetzt leer oder sollte da dann die isSick(true) - Methode aufgerufen werden? Bin mir gerade nämlich nicht so sicher, wozu ich überhaupt ein Interface benötige wenn ich für jeden Zustand ohnehin eine eigene Zustandsklasse brauche und die dann gezielt aufrufe. Reichte da nicht dann die Injektion des Worker-Objekts auch aus?
Oder ist das Bsp. hier einfach nicht so der Knüller?
liebe Grüße :)
 
Y

yfons123

Gast
du hast es umgedreht
Java:
class Player
{
    Movement movement = new Forward();
    public void Process(float delta){
        movement = movement.Process();
    }
}
interface Movement
{
    public Movement Process();   
}
class Forward implements Movement
{
    public Movement Process(){
        if(KeyInput.SpaceBar)
            return new Jump().Process();
        System.out.println("Move");
    }   
}
....
 

Wuast

Bekanntes Mitglied
was hab ich umgedreht?

Deine Player-Klasse entspräche meiner Worker-Klasse (die ich hier nicht reinkopiert habe).
Movement Interface = workerStateInterface und Forward ist doch das, was in Abhängigkeit vom Zustand passiert. In meiner Vorlage hieß das ZustandXYZ, bei mir halt WorkerStateSickness und WorkerStateAtWork.

Oder was meinst du?
 
Y

yfons123

Gast
du hast einfach nur eine composition gemacht und an die klasse das wort "state" dran gehängt, das macht es nicht zum state pattern
 

mihe7

Top Contributor
Bin mir gerade nämlich nicht so sicher, wozu ich überhaupt ein Interface benötige wenn ich für jeden Zustand ohnehin eine eigene Zustandsklasse brauche und die dann gezielt aufrufe.
Das hast Du völlig richtig erkannt: der State wird ja gerade durch den Typ dargestellt. Das Interface brauchst Du, um die Methode(n) zu deklarieren, die aufgerufen wird (werden). Im Prinzip ist das State Pattern nichts anderes als das Strategy Pattern, nur dass die "Strategie" eben abhängig vom internen Zustand ist (das Objekt wählt also die Strategie selbst, beim Strategy Pattern wird das von außen festgelegt).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
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
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
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
T Decorator Pattern Java Basics - Anfänger-Themen 7
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
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
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