Sobes.tech
Middle — Middle+

შეგიძლიათ ახსნათ State-ის ნაგულისხმევი განხორციელება და როგორ მართავს ის ობიექტის მდგომარეობას?

sobes.tech AI

პასუხი AI-სგან

State ნიმუში საშუალებას აძლევს ობიექტს შეცვალოს თავისი ქცევა მისი შიდა მდგომარეობის მიხედვით, ამ დროს შეცვალოს მდგომარეობის კლასი შესრულების დროს.

შიდა განხორციელება ჩვეულებრივ ეფუძნება შემდეგ პრინციპებს:

  • არსებობს კონტექსტი (Context), რომელიც შეიცავს ბმულს მიმდინარე მდგომარეობის ობიექტზე (State).
  • State ინტერფეისი განსაზღვრავს მეთოდების ნაკრებს, რომლებიც განახორციელებს სხვადასხვა მდგომარეობებს.
  • თითოეული კონკრეტული მდგომარეობა ამ ინტერფეისს ახორციელებს და განსაზღვრავს ამ მდგომარეობისთვის ქცევას.
  • კონტექსტი გადაეცემა მეთოდების გამოძახებებს მიმდინარე მდგომარეობას.
  • საჭიროების შემთხვევაში, მდგომარეობა შეიძლება თვითონვე შეიცვალოს, შეცვლის ბმულს კონტექსტში სხვა მდგომარეობის ობიექტზე.

Swift (iOS) მაგალითი:

protocol State {
    func handle(context: Context)
}

class Context {
    private var state: State

    init(state: State) {
        self.state = state
    }

    func request() {
        state.handle(context: self)
    }

    func changeState(to newState: State) {
        self.state = newState
    }
}

class ConcreteStateA: State {
    func handle(context: Context) {
        print("სტატუსი A მართავს მოთხოვნას")
        context.changeState(to: ConcreteStateB())
    }
}

class ConcreteStateB: State {
    func handle(context: Context) {
        print("სტატუსი B მართავს მოთხოვნას")
        context.changeState(to: ConcreteStateA())
    }
}

// გამოყენება:
let context = Context(state: ConcreteStateA())
context.request() // სტატუსი A მართავს მოთხოვნას
context.request() // სტატუსი B მართავს მოთხოვნას

ამ გზით, ობიექტი დინამიურად იცვლის თავის ქცევას, უბრალოდ გადართვით მისი შიდა მდგომარეობა.