Dekoratormønsteret er et kraftig designmønster i programvareteknikk som tillater utviklere å legge til ny funksjonalitet til eksisterende objekter uten å endre sin opprinnelige kode. Denne tilnærmingen er spesielt nyttig når du trenger å legge til logging til tjenestemetoder uten å endre kildekoden sin, noe som sikrer ren og vedlikeholdsbar kodebase.

Forstå dekoratormønsteret

Dekoratormønsteret innebærer å skape en wrapper klasse som implementerer det samme grensesnittet som den opprinnelige tjenesten. Denne wrapper delegater ringer til den opprinnelige tjenesten, men legger til ytterligere oppførsel - som logging - før eller etter metoden utføres.

Implementere logging med dekoratormønster

Anta at du har et tjenestegrensesnitt:

public interface DataService {
 void fetchData();
}

Du kan lage en konkret implementering:

public class RealDataService implements DataService {
 @Override
 public void fetchData() {
 // Fetch data from a database or external API
 }
}

Deretter oppretter du en dekorator klasse som legger til logging:

public class LoggingDataServiceDecorator implements DataService {
 private final DataService wrappedService;

 public LoggingDataServiceDecorator(DataService service) {
 this.wrappedService = service;
 }

 @Override
 public void fetchData() {
 System.out.println("Fetching data started.");
 wrappedService.fetchData();
 System.out.println("Fetching data completed.");
 }
}

Bruker dekoratoren

Hvis du vil legge til logging, kan du øyeblikkelig dekorere med eksisterende tjeneste:

DataService service = new RealDataService();
DataService loggedService = new LoggingDataServiceDecorator(service);

// Now, calling fetchData will include logging
loggedService.fetchData();

Fordelene med dekoratormønsteret

  • Forbedrer eksisterende funksjonalitet uten å endre originalkoden
  • Fremmer gjenbruk og separering av bekymringer
  • Hjelper å legge til flere lag av oppførsel dynamisk

Ved å bruke dekoratormønsteret for logging er en elegant løsning som opprettholder ren kode og følger det åpent lukkede prinsippet, noe som gjør applikasjonene enklere å utvide og vedlikeholde.