Sobes.tech
Junior — Middle

Ինչպե՞ս իրականացնել տարբեր ֆունկցիաների կատարմանը մեթոդների ներսում՝ կախված դասի ընթացիկ վիճակից կամ ռեժիմից։

sobes.tech AI

Պատասխան AI-ից

Տարբերակների իրականացման համար, երբ դասի մեթոդների վարքագիծը կախված է ընթացիկ վիճակից կամ աշխատանքի ռեժիմից, հաճախ օգտագործվում է «Վիճակ» (State) դիզայնի նմուշը:

Իդեան այն է, որ դասը ունի ներքին վիճակ, որը ներկայացված է առանձին օբյեկտներով, որոնք իրականացնում են ընդհանուր ինտերֆեյս։ Մեթոդի կանչը փոխանցվում է ընթացիկ վիճակին, որը որոշում է կոնկրետ վարքագիծը:

Java-ում օրինակ՝

interface State {
    void handle();
}

class StateA implements State {
    public void handle() {
        System.out.println("Վիճակ A-ի վարքագիծ");
    }
}

class StateB implements State {
    public void handle() {
        System.out.println("Վիճակ B-ի վարքագիծ");
    }
}

class Context {
    private State state;

    public void setState(State state) {
        this.state = state;
    }

    public void request() {
        state.handle();
    }
}

// Օգտագործում
Context context = new Context();
context.setState(new StateA());
context.request(); // Վիճակ A-ի վարքագիծ
context.setState(new StateB());
context.request(); // Վիճակ B-ի վարքագիծ

Այս կերպ, մեթոդների վարքագիծը կարող է փոխվել առանց դասի ներսում բազմաթիվ պայմանական օպերատորների օգտագործման։