Følgende vedlagte klasser/interfaces brukes, men skal ikke endres i denne oppgaven. Du trenger ikke forstå hvordan metodene er implementert, bare benytte deg direkte av de. - SomeServiceImpl - Implementasjon av SomeService.
- SomeService - Grensesnitt som implementers i både SomeServiceImpl og LoggingSomeService.
- Logger - En hjelpeklasse for å logge resultater.
Du skal fylle ut LoggingSomeService og metodene/konstruktør i denne klassen. LoggingSomeService skal delegere videre til en delegat, som skal utføre arbeidet, og deretter logge resultatet før det returneres. Følgende metoder skal implementeres: - LoggingSomeService(SomeService delegate, Logger logger) - Oppretter et objekt av LoggingSomeService med en delegat og en logger.
- getAMagicString() - Returnerer en magisk String. Det er den delegertes oppgave å hente ut Stringen, og den skal logges før det returneres.
- getAMagicNumber() - Returnerer et magisk tall. Det er den delegertes oppgave å hente ut tallet, og det skal logges før det returneres.
Expand |
---|
|
Code Block |
---|
| public interface SomeService {
public String getAMagicString();
public int getAMagicNumber();
}
public class Logger {
// This is only for testing
Collection<String> hasLogged = new ArrayList<>();
public void log(String log) {
System.out.println(log);
hasLogged.add(log);
}
}
public class SomeServiceImpl implements SomeService {
@Override
public String getAMagicString() {
return "magic";
}
@Override
public int getAMagicNumber() {
return 42;
}
}
public class LoggingSomeService implements SomeService {
// Add needed fields here
/*
* Creates a LoggingSomeService object with the given delegate and logger
*/
public LoggingSomeService(SomeService delegate, Logger logger) {
...
}
@Override
/**
* Delegates the job of calculating a magic string to the delegate, and logs the
* result before returning it
*
* @return A string
*/
public String getAMagicString() {
...
}
/**
* Delegates the job of calculating a magic number to the delegate, and logs the
* result before returning it
*
* @return An integer
*/
@Override
public int getAMagicNumber() {
...
}
}
|
|
Expand |
---|
|
Code Block |
---|
| public interface SomeService {
public String getAMagicString();
public int getAMagicNumber();
}
import java.util.ArrayList;
import java.util.Collection;
public class Logger {
// This is only for testing
Collection<String> hasLogged = new ArrayList<>();
public void log(String log) {
System.out.println(log);
hasLogged.add(log);
}
}
public class SomeServiceImpl implements SomeService {
@Override
public String getAMagicString() {
return "magic";
}
@Override
public int getAMagicNumber() {
return 42;
}
}
public class LoggingSomeService implements SomeService {
// Add needed fields here
private SomeService delegate;
private Logger logger;
/*
* Creates a LoggingSomeService object with the given delegate and logger
*/
public LoggingSomeService(SomeService delegate, Logger logger) {
this.delegate = delegate;
this.logger = logger;
}
@Override
/**
* Delegates the job of calculating a magic string to the delegate, and logs the
* result before returning it
*
* @return A string
*/
public String getAMagicString() {
String magic = delegate.getAMagicString();
logger.log(magic);
return magic;
}
/**
* Delegates the job of calculating a magic number to the delegate, and logs the
* result before returning it
*
* @return An integer
*/
@Override
public int getAMagicNumber() {
int magicNumber = delegate.getAMagicNumber();
logger.log(Integer.toString(magicNumber));
return magicNumber;
}
}
|
|
|