Sobes.tech
Junior — Middle

Программалык камсыздоо долбоорлоо контекстинде Adapter жана Decorator шаблондорунун айырмачылыктарын түшүндүрө аласызбы?

sobes.tech AI

AIден жооп

Adapter жана Decorator үлгүлөрү көбүнчө аралаштырылат, бирок алардын ар башка максаттары жана колдонуу жолдору бар:

  • Adapter (Адаптер) — бир класстын интерфейсин кардар күтүп жаткан интерфейске айландыруу үчүн кызмат кылат. Ал туура келбеген интерфейстерди бирге иштетүү керек болгондо колдонулат. Адаптер объектти каптайт жана кардардын чакырууларын ылайыкташтырылган объекттин чакырууларына которот.

  • Decorator (Декоратор) — объектке динамикалык түрдө жаңы жоопкерчиликтер кошуу үчүн арналган. Декоратор объектти каптайт жана анын жүрүм-турумун кеңейтет же өзгөртөт.

Негизги айырмачылыктар:

  • Adapter объекттин интерфейсин өзгөртөт, кардар менен шайкеш болуу үчүн.
  • Decorator объекттин интерфейсин сактайт, бирок жаңы жүрүм-турум кошот.

Java мисалы:

// Adapter: интерфейсти ылайыкташтыруу
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("Өзгөчө талап");
    }
}

class Adapter implements Target {
    private Adaptee adaptee;
    Adapter(Adaptee a) { this.adaptee = a; }
    public void request() {
        adaptee.specificRequest();
    }
}

// Декоратор: жүрүм-турумду кошуу
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("Негизги операция");
    }
}

class Decorator implements Component {
    protected Component component;
    Decorator(Component c) { this.component = c; }
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends Decorator {
    ConcreteDecorator(Component c) { super(c); }
    public void operation() {
        super.operation();
        System.out.println("Кошумча жүрүм-турум");
    }
}