Vi skal i dette scenarioet ha en sjef, eller RegionalManager, som har én eller flere arbeidere, eller Clerks, altså i en såkalt én-til-mange relasjon. Et Employee-grensesnitt definerer et oppførsel som er felles for de ansatte, og implementeres av både RegionalManager og Clerk.
Del 1: Employee, Clerk og Printer
Employee-grensesnittet har følgende metoder:
getName() - returnerer den ansattes navn
doCalculations(BinaryOperator<Double> operation, double value1, double value2) - regner ut resultatet av å utføre operation med argumentene value1 og value2
printDocument(String document) - Printer document. Hvordan dette gjøres avhenger av den spesifikke implementasjonen
Lag dette grensesnittet, og lag så en Clerk-klasse som implementerer det. Klassen skal ha følgende konstruktør:
Clerk(String name)
Clerk-klassen må inneholde egen logikk for å løse doCalculations, men skal delegere printDocuments til en Printer-klasse.
Definer en Printer-klasse med følgende metoder:
printDocument(String document) - skriver documentet til konsollen
getPrintHistory() - returnerer en List<String> med dokumenter som har blitt printet
La så Clerk delegere printDocument(String document) til Printer.
Testkode for Clerk er her: ... Originalkoden for testen(jextest) kan du finne her: ...
Testkode for Printer er her: ... Originalkoden for testen(jextest) kan du finne her: ...
Del 2: Manager
Vi definerer så sjefen til de hardt-arbeidende Clerk-objektene. Manager-klassen har følgende konstruktør:
Manager (List<Employee> employees)
La så Manager implementere Employee-grensesnittet. Implementer oppgavene ved å delegere alle videre til en av arbeiderne i listen med Clerk-objekter gitt i konstruktøren.
Testkode for Manager er her: ... Originalkoden for testen(jextest) kan du finne her: ...
Del 3: Hovedprogram
Lag et hovedprogram som illustrerer hva som skjer med effektiviteten når vi legger til flere nivåer med mellomledere.