Sobes.tech
Junior — Middle

Масъул аст, ки чӣ гуна кор мекунад паттерн Observer ва дар кадом ҳолатҳо истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Модели Observer (Наблюдател) имкон медиҳад, ки объект (мулоқоткунанда) дигар объектҳоро (обунаҳо) огоҳ кунад, ки дар бораи тағироти ҳолати худ, бе пайванди сахт байни онҳо, хабар диҳад. Мулоқоткунанда рӯйхати обунаҳоро нигоҳ медорад ва онҳоро дар вақти тағирот огоҳ мекунад.

Ин модел одатан барои татбиқи системҳои рӯйдодҳо истифода мешавад, масалан, дар iOS — NotificationCenter, KVO (Key-Value Observing) ё делегатҳо.

Масалан дар Swift:

protocol Observer: AnyObject {
    func update(value: Int)
}

class Subject {
    private var observers = [Observer]()
    private var value: Int = 0 {
        didSet {
            notify()
        }
    }
    
    func addObserver(_ observer: Observer) {
        observers.append(observer)
    }
    
    func setValue(_ newValue: Int) {
        value = newValue
    }
    
    private func notify() {
        observers.forEach { $0.update(value: value) }
    }
}

class ConcreteObserver: Observer {
    func update(value: Int) {
        print("Арзиши навсозиш шуд: \(value)")
    }
}

let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10)  // Натиҷа: Арзиши навсозиш шуд: 10

Инро вақте истифода мебаранд, ки зарур аст, ки манбаи маълумот аз истеъмолкунандагон ҷудо карда шавад ва сабт кардани рӯйдодҳо бофосила таъмин карда шавад.