Sobes.tech
Junior — Middle

როგორ განახორციელებდი Observer დიზაინის ნიმუშს?

sobes.tech AI

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

Observer დიზაინის ნიმუში გამოიყენება ობიექტების მონიტორების გამოწერის ორგანიზებისთვის სხვა ობიექტის (სუბიექტის) მოვლენებზე ან მდგომარეობის ცვლილებებზე. iOS-ზე მას შეიძლება განხორციელდეს რამდენიმე გზით, მაგალითად, პროტოკოლებისა და დელეგატების, NotificationCenter-ის ან საკუთარი რეალიზაციის საშუალებით.

სადაც არის მარტივი რეალიზაციის მაგალითი პროტოკოლის საშუალებით:

protocol Observer: AnyObject {
    func update(data: String)
}

class Subject {
    private var observers = [Observer]()
    private var state: String = ""

    func attach(observer: Observer) {
        observers.append(observer)
    }

    func detach(observer: Observer) {
        observers.removeAll { $0 === observer }
    }

    func setState(_ newState: String) {
        state = newState
        notify()
    }

    private func notify() {
        for observer in observers {
            observer.update(data: state)
        }
    }
}

class ConcreteObserver: Observer {
    func update(data: String) {
        print("Observer received update: \(data)")
    }
}

// გამოყენება:
let subject = Subject()
let observer1 = ConcreteObserver()
subject.attach(observer: observer1)
subject.setState("ახალი მდგომარეობა")

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