Sobes.tech
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();
        // дополнительное поведение
    }
}