[go: up one dir, main page]

0% found this document useful (0 votes)
13 views17 pages

Presentatie DesignPatterns Week6

1

Uploaded by

jeronreijne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views17 pages

Presentatie DesignPatterns Week6

1

Uploaded by

jeronreijne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Design Patterns

Gerwin van Dijken (gerwin.vandijken@inholland.nl)


Programma periode 1.4
01 (wk-15) abstracte classes en interfaces
02 (wk-16) Template Method pattern / Observer pattern
03 (wk-17) MVC pattern
04 (wk-18) geen lessen (meivakantie)
05 (wk-19) Strategy pattern / Adapter pattern
06 (wk-20) Singleton pattern / State pattern
07 (wk-21) Factory patterns
08 (wk-22) herhaling / proeftentamen
--------------------------------------------------------------------------------
09 (wk-23) tentamen (praktijk)
10 (wk-24) hertentamens (vakken periode 1.3)
11 (wk-25) hertentamens (vakken periode 1.4)
(Simple) Factory

Het ziet er naar uit


dat deze code in de
toekomst aangepast
zal worden…

En dit soort code


staat vaak op
meerdere plekken…

“identify the aspects that vary and separate them from


what stays the same...”
(Simple) Factory

We voegen een ‘Factory’ class


toe die zich alleen bezig houdt
met het aanmaken van
objecten (vehicles) …
(Simple) Factory

… en verplaatsen de
‘creation-code’ naar
een methode binnen
deze Factory-class.

Wijzigingen omtrent het


aanmaken van Vehicles zal nu
alleen binnen deze class
plaatsvinden.

Deze Factory kan door


meerdere ‘clients’ gebruikt
worden, niet alleen door de
VehicleShop…
(Simple) Factory

De VehicleShop
gebruikt nu de factory
om objecten (Vehicles)
aan te maken.

Hierdoor hoeft de VehicleShop


niet meer aangepast worden
als er andere ‘vehicles’
aangemaakt moeten worden
in de toekomst….
(Simple) Factory

De VehicleShop verkrijgt
objecten (vehicles) via de
factory.
The Factory Method (GoF): ‘Define an interface

Factory Method for creating an object, but let subclasses decide


which class to instantiate. Factory Method lets
a class defer instantiation to subclasses.’

Stel we hebben een maze met


verschillende rooms; elke room heeft 4
sides (Wall, Door or Room).
Factory Method
Het gebruik van
de ‘new’-
operator maakt
Verder hebben
deze code in-
we een
flexible…
MazeGame class,
die een Maze kan
aanmaken.

Maar stel nu dat we een ander


soort Maze willen maken met
dezelfde indeling maar met bv
‘enchanted’ Rooms en Doors?
Factory Method

We kunnen beter een


set van Make-
methoden (“Factory
methods”) definieren
om daarmee de
items aan te maken.
(eventueel abstract…)
Factory Method
Factory Method

Een “Enchanted”
mazegame hoeft nu
alleen een aantal
Factory-methods te
overschrijven.
Het aanmaken v/d
maze (createMaze)
zelf blijft
ongewijzigd!
The Abstract Factory (GoF): ‘Provide an

Abstract Factory interface for creating families of related


or dependent objects without specifying
their concrete classes.’

Bij de “Abstract
Factory” worden
de objecten via
speciale factories
aangemaakt.

De “BombedMazeFactory”
maakt ‘bombed’ objecten aan,
zoals BombedWall and
RoomWithABomb.

De “EnchantedMazeFactory”
maakt ‘enchanted’ objecten
aan, zoals EnchantedDoor
and EnchantedRoom.
Abstract Factory

Bij de “Abstract
Factory” heb je Zo heb je hier de familie ‘bombed’
hele ‘families’ van objecten… (allemaal aangemaakt
gerelateerde door de BombedMazeFactory)
objecten.

En hier de familie ‘enchanted’


objecten… (allemaal aangemaakt
door de EnchantedMazeFactory)
Abstract Factory

Via een factory


worden alle
maze-items
(Room, Wall, …)
aangemaakt.

Wat voor maze-items we


krijgen, hangt dus af van de
factory die we gebruiken.
Abstract Factory

De Maak-methoden in de
(base) MazeFactory class zijn
virtual, zodat ze overschreven
kunnen worden door een
afgeleide Factory class (zoals
de BombedMazeFactory class).
Opdrachten
◼ Zie Moodle: ‘Week 6 opdrachten’

You might also like