Sobes.tech
Junior
142

Бағдарламалауда декоратордың мақсаты неде?

AI-дан жауап

sobes.tech AI

Декоратор объектке міндеттерді динамикалық түрде қосу үшін пайдаланылады. Ол бастапқы объектіні орап, әдістер шақыруларын делегаттап, негізгі әдіс шақыру алдында немесе кейін әрекетті қосады немесе өзгертеді. Бұл функционалдылықты бастапқы сыныпты өзгеріссіз кеңейтуге мүмкіндік береді. Негізгі артықшылығы — әртүрлі декораторларды икемді түрде біріктіру.

// Негізгі функционалдылықты анықтайтын интерфейс
interface Component {
    String operation();
}

// Интерфейсті жүзеге асыратын нақты класс
class ConcreteComponent implements Component {
    @Override
    public String operation() {
        return "Негізгі функция";
    }
}

// Декоратордың абстрактты класы
abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public String operation() {
        return component.operation();
    }
}

// Жаңа әрекетті қосатын нақты декоратор
class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public String operation() {
        return "Декоратор А(" + super.operation() + ")";
    }
}

// Басқа нақты декоратор
class ConcreteDecoratorB extends Decorator {
    public ConcreteDecoratorB(Component component) {
        super(component);
    }

    @Override
    public String operation() {
        return "Декоратор Б(" + super.operation() + ")";
    }
}

/*
// Қолдану мысалы:
public class Main {
    public static void main(String[] args) {
        Component simple = new ConcreteComponent();
        System.out.println("Қарапайым объект: " + simple.operation());

        Component decoratorA = new ConcreteDecoratorA(simple);
        System.out.println("Декоратор А бар объект: " + decoratorA.operation());

        Component decoratorB = new ConcreteDecoratorB(decoratorA);
        System.out.println("А және Б декораторлары бар объект: " + decoratorB.operation());
    }
}
*/

Мұрагерлікпен салыстыру:

Аспект Декоратор Мұрагерлік
Кеңейту Орындау кезінде динамикалық түрде әрекетті қосу Компиляция кезінде статикалық кеңейту
Икемділік Бірнеше декораторларды оңай біріктіруге болады Қатты иерархия құрады
Көп функциялылық Әр декоратор бір функцияны қосады Функциялар қосу кезінде сыныптарды көбейту
Әрекетті өзгерту Объектіні орап, оның класын өзгермейді Негізгі немесе туынды сыныпты өзгерту қажет