Sobes.tech
Junior — Middle

Можете ли да обясните концепцията и приложението на патърна Декоратор в обектно-ориентираното програмиране?

sobes.tech AI

Отговор от AI

Моделът Decorator позволява динамично добавяне на нови отговорности към обекти, като ги обвива в други декоратор обекти, без да променя изходния код на класа. Това е особено полезно, когато трябва да разширите функционалността без наследяване.

Пример: има базов интерфейс Напитка с метода стойност(). Можете да създадете клас Кафе, а след това декоратори СМляко, СЗахар, които добавят стойност и променят поведението.

interface Напитка {
    double стойност();
}

class Кафе implements Напитка {
    public double стойност() { return 5.0; }
}

class ДекораторМляко implements Напитка {
    private Напитка напитка;
    public ДекораторМляко(Напитка напитка) { this.напитка = напитка; }
    public double стойност() { return напитка.стойност() + 1.0; }
}

// Използване
Напитка кафе = new Кафе();
Напитка кафеСМляко = new ДекораторМляко(кафе);
System.out.println(кафеСМляко.стойност()); // 6.0

По този начин, можете гъвкаво да комбинирате функционалността без създаване на множество подкласове.