Table of Contents
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.