You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »


Denne oppgaven bruker delegeringsteknikken for å modellere arbeidsfordeling på en “vanlig” arbeidsplass. Denne oppgaven kan muligens oppleves som mindre meningsfull. Dette er kanskje omtrent tilsvarende hvor meningsløst noen typer kontorarbeid kan virke.

Vi skal i dette scenarioet ha en sjef, eller Manager, som har én eller flere arbeidere, eller Clerks, altså i en såkalt én-til-mange relasjon. Et Employee-grensesnitt definerer en oppførsel som er felles for de ansatte, og implementeres av både Manager og Clerk.

Del 1: Employee, Clerk og Printer

Employee-grensesnittet har følgende metoder:

  • void doCalculations(BinaryOperator<Double> operation, double value1, double value2) - regner ut resultatet av å utføre operation med argumentene value1 og value2

  • void printDocument(String document) - Printer document. Hvordan dette gjøres avhenger av den spesifikke implementasjonen 

  • int taskCount() - returnerer hvor mange oppgaver (beregninger og printinger) som har blitt utført av eller på vegne av dette Employee-objektet
  • int resourceCount() - antallet employees til rådighet, inkludert Employee-objektet metoden blir kalt på. En Employee skal altså medregne seg selv i antall ressurser den ansatte har til rådighet. Dette tallet skal inkludere alle Employee-objekter nedover i hierarkiet.

Lag dette grensesnittet, og lag så en Clerk-klasse som implementerer det. Clerk må ha følgende konstruktør:

  • Clerk(Printer printer)

Clerk-klassen må inneholde egen logikk for å løse doCalculations, men skal altså delegere printDocuments til et Printer-objekt gitt i konstruktøren.

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. Siden Clerk ikke har noen andre ansatte å delegere til, vil resourceCount være alltid være 1.


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 (Collection<Employee> employees) - utløser et IllegalArgumentException dersom employees er tom

La så Manager implementere Employee-grensesnittet. Implementer Managers oppgaver ved å delegere alle videre til en av arbeiderne i listen med Employee-objekter gitt i konstruktøren. Mens Clerk altså har kun én tilgjengelig ressurs vil Manager-objekter vil ha flere.


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.

Lag først et Manager-objekt som blir tildelt noen Clerk-objekter under seg. Presentér deretter effektiviteten av hierarkiet ved å skrive ut taskCount/resourceCount for Manager-objektet. Vis deretter hvordan effektiviteten faller når vi legger til nivåer med mellomledere ved å lage to eller flere nivåer med Manager, hvor lederne på bunnen tildeles Clerk-objekter, og skriv ut den nye effektiviteten for topplederne.


  • No labels