Introductie tot GoF patterns in Java Java patterns Introductie tot GoF patterns in Java
Lectuur GoF boek James Cooper Bruce Eckel
Wat ? Een design pattern is een standaard oplossing voor een veel voorkomend design probleem Drie types (GoF) Creational : patterns om objecten te creeren Structural : patterns om objecten samen te stellen Behavioral : patterns om onderling gedrag van objecten te regelen, alle andere dus…
Creational Factory Abstract Factory Singleton Builder Prototype objecten creeren via factory interface Abstract Factory factory creeren via factory-factory interface Singleton klasse waarvan slechts 1 object bestaat Builder scheiding van object constructie en voorstelling Prototype objecten creeren door basisobject te klonen
Factory pattern Wat ? Wanneer ? Objecten creeren via ander object (factory) i.p.v. rechtstreeks via constructor Wanneer ? Klasse van object nog niet gekend at compile-time Creatie van object overlaten aan subklasse Creatie = complex proces (bv. pool)
Factory pattern Opgave (Cooper) Eenvoudige Namer klasse : splitst volledige naam op in voornaam en achternaam Twee mogelijke inputs : Piet Hein Hein,Piet Factory selecteert een correcte Namer klasse afhankelijk van input (FirstFirst of LastFirst)
Abstract Factory Pattern Wat ? Niveau van indirectie bovenop Factory, d.w.z de factory zelf is abstract en wordt pas concreet na aanroepen van een creatiemethode Wanneer ? Meerdere families van objecten GUI widgets voor meerdere look-and-feels data access voor meerdere database types
Abstract Factory pattern Oefening: Creeer abstracte factory om een String en een int-waarde op te halen Maak concrete factories die respectievelijk via de console en via een properties file werken
Singleton pattern Wat ? Wanneer ? Aantal instantiaties van een klasse beperken tot 1 (of enkele) Wanneer ? Meestal opgelegd door het model zelf Dure objecten
Singleton pattern Opgave( Eckel ) Creeer singleton klasse Singleton Methoden : getInstance() geeft singleton object terug int getValue() geeft waarde void setValue( int value ) zet waarde Schrijf test waarin je singleton opvraagt, waarde checkt, verandert, opnieuw singleton opvraagt,…
Singleton pattern Opgave( Eckel ) Creer pool van connecties Connection interface ConnectionPool : singleton, gebruikt PoolManager PoolManager : managet pool van objecten ConnectionImplementation
Builder pattern Wat ? Wanneer ? Scheiding van object creatie (gelijk) en representatie (verschillend) Wanneer ? Creatie van meerdere objecten Creatieproces bestaat uit meerdere stappen die echter gelijk zijn voor elk object
Opgave Creeer twee builder klassen die een string opsplitsen in woorden en in resp. een Map en een SortedSet opslaan Klasse : BaseBuilder : basisklasse die build proces definieert SetBuilder MapBuilder
Prototype pattern Wat ? Creatie van object door klonen Wanneer ? Object moet gecopieerd worden zonder dat men het type kent Java : Speciale interface hiervoor : Cloneable Opgelet : default implementatie (Object) maakt geen diepe kopie !
Prototype pattern Oefening : Implementeer een clone() methode die een diepe kopie maakt door het object te serializeren/deserializeren
Structural Adapter Bridge Composite Decorator Interface aanpassen aan andere interface Bridge Interface en implementatie kunnen onafhankelijk evolueren Composite Boomstructuur van objecten, zelfde interface voor tak/blad Decorator Functionaliteit toevoegen door te wrappen
Adapter Wat ? Klasse die een bestaande interface converteert naar een andere (door delegatie) Wanneer ? Bestaande klasse moet aangepast worden aan een nieuwe interface
Adapter Oefening : Adaptee klasse stelt lijst van autos voor met naam + prijs Adapter moet Adaptee aanpassen aan Swing table model
Bridge Wat ? Abstracte klasse met meerdere concrete implementaties via delegatie Wanneer ? Als men interfaces en concrete implementaties apart wil laten evolueren
Bridge Voorbeeld : Abstraction Implementor RefinedAbstraction ConcreteImplementorA ConcreteImplementorB
Composite Wat ? gemeenschappelijke abstracte klasse voor geheel/deel Wanneer ? boomstructuren
Composite Oefening : Stel klassen om een logische expressie te evalueren en uit te printen Evaluatie en uitprinten gebeurt door de boomstructuur te doorwandelen via recursie
Decorator Wat ? Dynamisch toevoegen van functionaliteit door te wrappen Wanneer ? Alternatief voor subklassen indien meerdere orthogonale toevoegingen mogelijk
Decorator java.io.BufferedReader is een voorbeeld van een decorator van de java.io.Reader klasse Maak een decorator van java.io.Reader die lijn per lijn leest en waarbij men eerst kan vragen of er nog lijnen zijn