Паттерн проектирования Delegation (Делегирование) — это структурный паттерн, который позволяет объекту передавать ответственность за выполнение задачи другому объекту. Делегирование подразумевает, что один объект передает выполнение задачи другому объекту, который может быть лучше подготовлен для выполнения этой задачи или который уже реализует нужный функционал.
Основная идея делегирования
Основная идея делегирования заключается в том, что вместо того, чтобы объект сам выполнял задачу, он делегирует выполнение другой сущности. Это позволяет разделять обязанности и повторно использовать код, не прибегая к наследованию.
Пример использования делегирования
Представим, что у нас есть класс Printer, который умеет печатать текст. Мы хотим, чтобы другой класс, скажем, Document, тоже мог печатать текст, но вместо того, чтобы реализовывать логику печати внутри класса Document, он будет делегировать эту задачу классу Printer.
// Класс Printer, который выполняет задачу печати
class Printer {
public void print(String text) {
System.out.println(text);
}
}
// Класс Document, который делегирует задачу печати объекту Printer
class Document {
private Printer printer = new Printer(); // Инициализация объекта Printer
public void print(String text) {
printer.print(text); // Делегирование задачи печати объекту Printer
}
}
// Основной класс для демонстрации делегирования
public class Main {
public static void main(String[] args) {
Document document = new Document();
document.print("Hello, World!"); // Вызов метода print у Document, который делегирует задачу Printer
}
}
Объяснение
- Класс Printer: Это класс, который знает, как печатать текст. Он имеет метод print, который выводит текст на консоль.
- Класс Document: Этот класс не реализует логику печати самостоятельно. Вместо этого он содержит объект Printer и делегирует ему задачу печати текста.
- Метод print в Document: Этот метод просто вызывает метод print у объекта Printer, передавая ему текст. То есть Document выступает как посредник между вызовом метода и фактическим выполнением задачи.
- Основной класс (Main): В этом классе создается объект Document, который использует делегирование для печати текста.
- Повторное использование кода: Делегирование позволяет использовать существующий код без необходимости его дублирования или модификации.
- Гибкость: Объект может делегировать выполнение разных задач разным объектам, что делает систему более гибкой и легко расширяемой.
- Избежание жесткой связи: Делегирование позволяет избегать жесткой связи между классами, что облегчает тестирование и модификацию кода.
- Снижение зависимости от наследования: Делегирование позволяет избегать излишнего использования наследования, что может привести к чрезмерной связанности классов и сложной иерархии.
- Дополнительный уровень абстракции: Делегирование добавляет дополнительный уровень вызовов, что может усложнить понимание кода.
- Повышенная сложность: Если делегирование используется слишком активно, это может привести к усложнению системы, особенно если делегирование применяется в разных частях программы.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ