ID: S202606031208
Status: school
Tags: avans 2-4 LU2, avans 2-4, avans 2-4 softwaredesign en kwaliteit vak, Design Patterns
avans 2-4 sdkl8 state design pattern
Enums kan je vervangen door een Strategy Design Pattern. Enums zijn eigenlijk alleen nuttig voor interfacing met externe tools, als jij een library / api wilt maken waarmee een ander kan interfacen.
Er bestaat een Anti Design Pattern, en een Singleton Design Pattern is een Anti Design Pattern
Categories
Categorieen van design patterns
Link to original
- Creational Design Patterns
- Creational design patterns zorgen voor objectinstantiëermechanismen, die flexibiliteit en herbruikbaarheid van je code vergroten.
- Factory Design Pattern
- Structural Design Patterns
- Structural patterns gaan over het samenstellen van objecten en classes in grotere structuren, met behoud van flexibiliteit en efficiëntie.
- MVC
- Behavioral Design Patterns
- Behavioral design patterns gaan over algoritmen en toewijzen van verantwoordelijkheden aan objecten.
- Strategy Design Pattern
- State Design Pattern
State Design Pattern
Je kan geen state pattern toepassen in software zonder State Transition Diagram.

Zonder State Design Pattern wordt de code heel messy met allemaal if statements:
public void insertQuarter() {
if (state == HAS_QUARTER) {
System.out.println("You can't insert another quarter");
} else if (state == SOLD_OUT) {
System.out.println("You can't insert a quarter, the machine is sold out");
} else if (state == SOLD) {
System.out.println("Please wait, we're already giving you a gumball");
} else if (state == NO_QUARTER) {
state = HAS_QUARTER;
System.out.println("You inserted a quarter");
}
}Dit werkt, maar is niet makkelijk aan te passen. De cyclomatic complexity is hier 5. Dat is al flink veel. En als je dit bij elke functie gaat doen loopt het heel snel op.

Dit is heel leuk en aardig, maar nu weet je niet hoe die states elkaar uitwisselen, daarom is de State Transition Diagram belangrijk.
En dan ziet zo de volledige Class Diagram er uit:

Je zou hierbij kunnen kiezen om 1 state in de gumball machine te hebben, en de states elkaar aanmaken. Maar je kan ook zeggen dat de gumball machine alle states heeft, en dat hij kiest welke actief is, zo kan je data in de states bewaren. Er zijn meerdere wegen naar Rome. Hangt van je casus af. Maar als je het vanuit de gumball machine doet kan je this mee geven zodat de states kunnen terugrefereren naar de gumball machine, maar dan heb je wel weer Tight Coupling naar de states, dan kan je weer de Factory Design Pattern gebruiken en gwn this meegeven met de method, of een losse methode om de gumball machine te koppelen.
Een state pattern mag nooit een nextState() methode hebben, want dat zegt niks over de functionaliteit, en wat als je terug wilt, of een state skipt, heel onduidelijk. Maak concrete methodes.
References
- dit is de lesstof van vandaag.