update
BIN
Writerside/images/image_375.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
Writerside/images/image_376.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Writerside/images/image_377.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
Writerside/images/image_378.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
Writerside/images/image_379.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Writerside/images/image_380.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
Writerside/images/image_381.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Writerside/images/image_382.png
Normal file
After Width: | Height: | Size: 96 KiB |
@ -15,4 +15,168 @@
|
|||||||
- Bibliotheken
|
- Bibliotheken
|
||||||
|
|
||||||
## Observer Pattern
|
## Observer Pattern
|
||||||
|
- One-To-Many Abhängigkeit
|
||||||
|
- Wenn ein Objekt sich ändert
|
||||||
|
- Alle Abhängigkeiten werden benachrichtigt
|
||||||
|
|
||||||
|
### Nutzung Observer Pattern
|
||||||
|
- Wenn Zustandsänderung eines Objekts Änderung in anderen Objekten hervorruft
|
||||||
|
- Wenn Objekte etwas beobachten müssen für eine bestimmte Zeit/Fall
|
||||||
|
|
||||||
|
### Beispiel Observer Pattern
|
||||||
|
- Kunden über Verfügbarkeit von Produkten informieren
|
||||||
|
- 2 Typen von Objekten: Kunde, Markt
|
||||||
|
|
||||||
|
#### Pull
|
||||||
|
- Kunde fragt häufiger nach, ob es da ist
|
||||||
|
- Meistens: NEIN
|
||||||
|
|
||||||
|
#### Push
|
||||||
|
- Markt schreibt alle Kunden an, sobald ein Produkt verfügbar ist
|
||||||
|
- Auch die, die kein Interesse haben
|
||||||
|
|
||||||
|
#### Observer
|
||||||
|
- Jedes Produkt hat eine Liste von Subscribern
|
||||||
|
- Sobald sich Verfügbarkeit ändert alle benachrichtigen
|
||||||
|
|
||||||
|
### Struktur Observer Pattern
|
||||||
|

|
||||||
|
#### Subject (Interface)
|
||||||
|
- Kennt seine Beobachter
|
||||||
|
|
||||||
|
#### Observer (Interface)
|
||||||
|
- Definiert Interface für Objekte, welche benachrichtigt werden sollen
|
||||||
|
|
||||||
|
#### ConcreteSubject
|
||||||
|
- Speichert Daten (oder Zustand) der Interesse
|
||||||
|
- Sendet Benachrichtigung bei Änderung
|
||||||
|
|
||||||
|
#### Concrete Observer
|
||||||
|
- Behält Referenz zu ConcreteSubject
|
||||||
|
- Gespeicherter Zustand bleibt gleich mit Subject-Zustand
|
||||||
|
- Implementiert das update-Interface des Observers
|
||||||
|
|
||||||
|
### Fazit Observer Pattern
|
||||||
|
- Wird gefördert durch das [OPC](SOLID-Principle.md#o-open-closed-principle-ocp)
|
||||||
|
- [LSP](SOLID-Principle.md#l-liskov-s-substitution-principle-lsp) wird angewendet
|
||||||
|
- [DIP](SOLID-Principle.md#d-dependency-inversion-principle-dip) wird angewendet
|
||||||
|
- [ISP](SOLID-Principle.md#i-interface-segregation-principle-isp) wird manchmal angewendet
|
||||||
|
- Manchmal kann eine Klasse Observer und Subjekt sein
|
||||||
|
|
||||||
|
|
||||||
|
## Factory Method (Virtual Constructor)
|
||||||
|
- Interface für die Erstellung eines Objekts
|
||||||
|
- Lässt Subklassen entscheiden welche Klassen instanziiert wird
|
||||||
|
- Ersteller Klassen wissen nicht von den tatsächlichen Objekten
|
||||||
|
|
||||||
|
### Struktur Factory Method
|
||||||
|

|
||||||
|
#### Product (Abstract Class / Interface)
|
||||||
|
- Definiert üblichen Typ der Objekte
|
||||||
|
- Abstraktion, welche von der restlichen Codebase genutzt wird
|
||||||
|
|
||||||
|
#### Concrete Product(s)
|
||||||
|
- Implementierung des Produkt-Interface
|
||||||
|
|
||||||
|
#### Creator (Abstract Class)
|
||||||
|
- Deklariert Factory-Methode
|
||||||
|
- Gibt Objekt zurück
|
||||||
|
- Kann noch andere Methoden enthalten
|
||||||
|
|
||||||
|
#### ConcreteCreator
|
||||||
|
- Jedes semantische Produkt hat seinen eigenen ConcreteCreator
|
||||||
|
- Überschreiben der Factory-Methode
|
||||||
|
- Implementierung der Kreation der spezifischen Produkte
|
||||||
|
- Mehrere ConcreteCreator können ein ConcreteProduct erstellen (bspw. verschiedene Werte)
|
||||||
|
|
||||||
|
### Beispiel Factory Pattern
|
||||||
|
- **Logistik Management Anwendung**
|
||||||
|
- Erste Version kann nur mit LKWs transportieren
|
||||||
|
- Transportation mit Schiff kommt dazu
|
||||||
|
- Code aus LKW Klasse muss teilweise auch in Schiffklasse verwendet werden
|
||||||
|
- Vllt. kommen ja noch mehr Transportmittel dazu?
|
||||||
|
- **Lösung**
|
||||||
|
- 
|
||||||
|
- Objektkreation macht nur die Factory-Methode, spezifisch für das Produkt
|
||||||
|
- In diesem Fall Transport
|
||||||
|
- Logistics ist der Ersteller
|
||||||
|
- Plan für die Lieferung
|
||||||
|
- Definierung der FactoryMethode
|
||||||
|
- ConcreteCreators
|
||||||
|
- 
|
||||||
|
|
||||||
|
### Fazit Factory Method
|
||||||
|
- Implementierung von OO Prinzipien
|
||||||
|
- [OCP](SOLID-Principle.md#o-open-closed-principle-ocp)
|
||||||
|
- Motivierung ist, dass Applikation erweiterbar ist
|
||||||
|
- Client bleibt geschlossen
|
||||||
|
- [LSP](SOLID-Principle.md#l-liskov-s-substitution-principle-lsp)
|
||||||
|
- Kann gestört werden durch unterdrückung der Standardimplementierung durch eine Subklasse
|
||||||
|
- [DIP](SOLID-Principle.md#d-dependency-inversion-principle-dip)
|
||||||
|
- Client definiert/besitzt Interface für Ersteller und Produkte
|
||||||
|
- Bestärkt [Loose Coupling](ImplementingForMaintainability.md#loose-coupling)
|
||||||
|
|
||||||
|
|
||||||
|
## Abstract Factory
|
||||||
|
- Interface für die Erstellung von Familien oder Abhängigkeiten von Objekten
|
||||||
|
|
||||||
|
### Struktur Abstract Factory
|
||||||
|

|
||||||
|
#### AbstractFactory (Interface)
|
||||||
|
- Deklariert Interface fpr Operationen, die Objekte produzieren
|
||||||
|
|
||||||
|
#### ConcreteFactory
|
||||||
|
- Repräsentiert Factory für eine Variante/Familie von Produkten
|
||||||
|
- Implementiert die Operationen, um Objekte zu erstellen
|
||||||
|
|
||||||
|
#### AbstractProduct (Interface)
|
||||||
|
- Deklariert Interface für einen Typ
|
||||||
|
|
||||||
|
#### ConcreteProduct
|
||||||
|
- Definiert konkretes Produkt der Familie
|
||||||
|
|
||||||
|
#### Client
|
||||||
|
- Nutzt nur AbstractFactory und AbstractProduct
|
||||||
|
|
||||||
|
### Beispiel Abstract Factory
|
||||||
|
- 
|
||||||
|
- AbstractProduct
|
||||||
|
- Chair, Sofa, CoffeeTable
|
||||||
|
- Produkt
|
||||||
|
- 3 jeder abstrakten Klasse
|
||||||
|
- Abstract Factory
|
||||||
|
- Interface für FurnitureFactory
|
||||||
|
- ConcreteFactory
|
||||||
|
- Implementierung des AbstractFactory Interface
|
||||||
|
|
||||||
|
### Fazit Abstract Factory
|
||||||
|
- **OO Prinzipien**
|
||||||
|
- [OCP](SOLID-Principle.md#o-open-closed-principle-ocp)
|
||||||
|
- [LSP](SOLID-Principle.md#l-liskov-s-substitution-principle-lsp)
|
||||||
|
- Abhängig von der Implementierung
|
||||||
|
- [DIP](SOLID-Principle.md#d-dependency-inversion-principle-dip)
|
||||||
|
- Client definiert/besitzt Interface für Ersteller und Produkte
|
||||||
|
|
||||||
|
|
||||||
|
## Singleton
|
||||||
|
- Sorgt dafür, dass eine Klasse nur ein Interface hat und dieses global erreichbar ist
|
||||||
|
- Wird genutzt, wenn eine Klasse nur eine einzelne Instanz haben soll
|
||||||
|
- bspw. DatenbankVerbindung
|
||||||
|
|
||||||
|
### Struktur Singleton
|
||||||
|
- Konstruktor hat private Sichtbarkeit
|
||||||
|
- Methode getInstance()
|
||||||
|
- 
|
||||||
|
|
||||||
|
### Beispiel Singleton
|
||||||
|
- 
|
||||||
|
|
||||||
|
### Fazit Singleton
|
||||||
|
- **Probleme**
|
||||||
|
- Pattern löst zwei Probleme gleichzeitig
|
||||||
|
- verletzt [SRP](SOLID-Principle.md#s-single-responsibility-principle-srp)
|
||||||
|
- Kann schlechtes Design verstecken (bspw. kein Loose Coupling)
|
||||||
|
|
||||||
|
|
||||||
|
## Adapter Pattern
|
||||||
-
|
-
|