Patterns Flashcards
What is a Factory pattern?
En factory pattern används för att skapa nya instanser av en klass. Till skillnad från en builder pattern kapslas de inte in i en klass. Istället för att använda en constructor och specifiera vilken typ av klass som skapas.https://upload.wikimedia.org/wikipedia/commons/4/43/W3sDesign_Factory_Method_Design_Pattern_UML.jpg
What is a Builder pattern?
En builder pattern används för att skapa nya instanser av en klass genom att kalla på en statisk builder klass. Klassen tar in argument och returnerar en builder. För att få den konstruerade klassen används metoden .build(). Simplifiera processen att skapa objekt.https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Builder_UML_class_diagram.svg/750px-Builder_UML_class_diagram.svg.png
What is a Strategy pattern?
En strategy pattern liknar en template pattern men de flesta metoderna är redan implementerade i en strategy pattern. Ett objekt tas in som delegeras ta hand om en specifik uppgift. Detta gör det möjligt att bestämma algoritm vid runtime. https://upload.wikimedia.org/wikipedia/commons/3/39/Strategy_Pattern_in_UML.png
What is a Template pattern?
En template pattern/method har en implementerad template metod som använder sig av abstrakta klasser för specifika detaljer. Subklassen sköter specifika implementationsdetaljer. Används för att undvika att upprepa kod. Antingen kan abstakta metoder överskuggas eller så används lambdauttryck. https://refactoring.guru/images/patterns/diagrams/template-method/solution-en-2x.png?id=4980d5dfb1fe07f065650e09756f5614
What is a Command pattern?
En command pattern har ett interface som innehåller instruktioner som ska exekveras vid ett senare tillfälle. Subklasser ärver interfacet och implementerar vad execute ska innebära.
What is a Decorator pattern?
En decorator pattern implementerar ett interface genom att kapsla in en fungerande implementation. Därefter kan detaljer läggas till, genom exempelvis en logger som sparar bankinfo. Anropas metoder i decoratorpattern skickas de vidare till motsvarande metoder till det inkapslade objektet.
Nya detaljer läggs till
What is an Observer pattern?
En observer pattern bygger på det funktionella abstrakta klassen i java kallat observerable. Funktionen addObserver(Observer) tar in ett objekt som implementerar det funktionella interfacet observer. När Observable meddelar att den uppdaterats enligt funktionen setChanged(); NotifyObservers; utför alla observerare sin metod, update(Observable, Objekt). Vad som gör observerpattern användbart är att en observable kan ha flera observers och vet inget om sina observers. https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Observer_w_update.svg/750px-Observer_w_update.svg.png
What are the SOLID principles?
(Most importantly SOD)
How can we make sure they are followed?
The SOLID principles are guidlines for good code.
S-Single responsibility principle wants code to have low coupling, high cohesion. Varje klass har sin uppgift som den ansvarar helt för.
O-Open closed principles wants the code we write to be flexible and easy to add futher features. This is done by avoiding hardcoding and using interfaces or more generic types. Importantly, without altering previous code.
D-Dependency inversion principle wants our classes to depend on interfaces and not on other classes. This avoids coupling which is bad for adding more feature to the code.
L-Liskov Substitution principle want the subclasses to fullfill the same requirements as the superclass. You should be able to replace a vegetable with a cucumber without the program breaking.
I-Interface segregation principle wants our classes to not implement more methods than are needed. We also don’t want our interfaces to be more complicated than is needed. Smaller interfaces are better.
What is Composite pattern?
En composite pattern används för att hantera grupper av värden som ett enskilt värde. Exempelvis kan samtliga entities tas bort när kommandot delete körs, eftersom entities implementerar entity interfacet. “Composite should be used when clients ignore the difference between compositions of objects and individual objects. If programmers find that they are using multiple objects in the same way, and often have nearly identical code to handle each of them, then composite is a good choice; it is less complex in this situation to treat primitives and composites as homogeneous” https://www.cs.unc.edu/~stotts/GOF/hires/Pictures/compo075.gif
Do you know what a UML-diagram is?
Unified Modelling language is an easily digestible standardized, simplistic visual model of computer programs.
What is a Class-diagram?
Draw an example
When is it relevant?
A class diagram shows how classes in a program are related to each other.
What is a Sequence diagram?
Draw an example
When is it relevant?
A sequence diagram shows where the program is when it executes. It shows which method is being performed, and what the return value and/or arguments are.
What is an Object diagram
Draw an example
When is it relevant?
An object diagram shows the object created during runtime of a program.
Do you know the methods commonly used for Optional?
How would you make an optional for a string?
map() utför lamdauttryck på alla optionals, ignorera om tom.
filter(predicate) -> replace optionals who do not fullfill the predicate.
flatmap() tar bort ett lager av “map” Optional<Optional<String>> -> Optional<String>
**get()** -> returns value or error if empty
toString -> return a value (good for printline debugging)
**orElseGet(other)** -> return value, otherwise invoke other
**orElse(T other)** -> return value, otherwise return other.
ofNullable -> return optional with value, otherwise return empty Optional.
**of(value)** -> return optional if value present.
**isPresent** -> return true if Optional is not empty
**empty()** -> return empty optional</String></String>
What is an MVC pattern?
Draw a simple klass diagram demonstrating the relationship
En model-view-controller pattern används för att göra gui som fortsätter att hålla relativt låg coupling och single responsibility.
Model är modellen för att som programmet ska göra i bakgrunden. (räknaren i en miniräknare)
View är vyn som användaren ser. I en miniräknare blir det siffrorna och knapparna som syns på skärmen.
Controller tar hand om kommunikationen mellan användaren och uppdaterar modellen och vyn. (Beror lite på implementation)
Eftersom view ska presentera model måste den känna till modellen. Controller måste också kunna uppdatera model och view.