Back to questions
Junior — Middle
75
Чем отличается использование паттернов Decorator и Adapter при проектировании систем?
Answer from AI
sobes.tech AI
Паттерны Decorator и Adapter решают разные задачи при проектировании систем:
-
Decorator
- Позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-декораторы.
- Используется для расширения функциональности без изменения исходного класса.
- Пример: добавление логирования или кеширования к существующему объекту.
-
Adapter
- Позволяет объектам с несовместимыми интерфейсами работать вместе.
- Оборачивает один интерфейс в другой, ожидаемый клиентом.
- Используется для интеграции сторонних библиотек или старого кода с новым интерфейсом.
Итого:
- Decorator расширяет поведение объекта.
- Adapter изменяет интерфейс объекта.
Пример на C#:
// Adapter
interface ITarget { void Request(); }
class Adaptee { public void SpecificRequest() { } }
class Adapter : ITarget {
private Adaptee adaptee = new Adaptee();
public void Request() { adaptee.SpecificRequest(); }
}
// Decorator
interface IComponent { void Operation(); }
class ConcreteComponent : IComponent {
public void Operation() { /* базовая реализация */ }
}
class Decorator : IComponent {
protected IComponent component;
public Decorator(IComponent component) { this.component = component; }
public virtual void Operation() {
component.Operation();
// дополнительное поведение
}
}