Kode eksempel


Kodeeksempel

I nedenstående eksempel er Nordea og Sydbank ved at fusionere til en ny storbank.
Begge banker har hver et kæmpe kartotek med kunder. Problemet er bare at Nordea har valgt at lægge deres kunder i en LinkedList og Sydbank har lagt deres kunder i et array af strenge. Måden hvorpå man søger, indsætter nye og sletter gamle kunder er altså forskellig for de to banker. Da der er mange kunder hos de to banker, ønskes der ikke at ændres i den underlæggende datastruktur. Derfor benyttes der Iterator Pattern! 


Først laves et interface der definerer én funktion, som returnerer et iterator interface.









Nedenstående viser de to aggerat klasser for Nordea og Sydbank. Heri ligger den originale datastruktur, henholdsvis LinkedList og array. Hver klasse realiserer IBanking interfacet, på hver deres måde. 
Det ses at Nordea returnerer en NordeaIterator, hvor Nordeas datastruktur tages med i constructoren.

































Iterator interfacet definerer et sæt metoder, for hvad man ønsker af funktionalitet. Her kan altså tilføjes flere metoder, hvis der ønskes det. Ekstra metoder kunne f.eks. være Search(), Insert() og Delete().












Hver bank implementerer hver deres iterator, som realiserer Iterator infacet. 
Hver af de to iteratorer implementerer metoderne på deres egen måde, i forhold til hvilken kollektion af data der ligger bag.





Til sidst er der programmet som benytter sig af iteratorerne.

Først "oprettes" Nordea og Sydbank med kunder heri (aggregater)
Herefter oprettes en Iterator til dem hver, ud fra de tidligere operettede aggregater.
Til sidst køres en funktion der printer alle navnene fra de to kollektioner ud.
Som det ses i funktion, bliver tre af de fire metoder fra Iterator interfacet brugt.
I clienten, der kan ses som samlingen af de to banker, er man altså ligeglad med hvilken type af kollektioner de to banker førhen har benyttet sig af. Nu bruges kun det interface som man selv har defineret.

Ingen kommentarer:

Send en kommentar