Рисунок декоратора — мощный шаблон дизайна в программной инженерии, позволяющий разработчикам добавлять новые функциональные возможности к существующим объектам без изменения их исходного кода. Такой подход особенно полезен, когда нужно добавлять логинг в методы обслуживания без изменения их исходного кода, обеспечивая чистые и поддерживаемые кодовые базы.

Понимание шаблона декоратора

Рисунок декоратора включает в себя создание класса обертки, который реализует тот же интерфейс, что и исходная услуга. Эта обертка делегаты звонят в исходную службу, но добавляет дополнительное поведение, такое как регистрация, до или после выполнения метода.

Внедрение лесозаготовок с шаблоном декоратора

Предположим, у вас есть интерфейс сервиса:

public interface DataService {
 void fetchData();
}

Вы можете создать конкретную реализацию:

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

Затем создайте класс декоратора, который добавляет вырубку:

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.");
 }
}

Используя декоратор

Чтобы добавить лог, укажите декоратору существующий сервис:

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

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

Преимущества шаблона декоратора

  • Улучшение существующих функций без изменения исходного кода
  • Содействует повторному использованию кода и разделению проблем
  • Способствует динамическому добавлению нескольких слоев поведения

Использование шаблона декоратора для ведения журнала - это элегантное решение, которое поддерживает чистый код и придерживается принципа открытого закрытия, что облегчает расширение и обслуживание ваших приложений.