Sobes.tech
Junior — Middle

Կարո՞ղ է արդյոք իրականացնել մի մեխանիզմ տեղեկացման միաժամանակ մի քանի օբյեկտների համար՝ օգտագործելով Observer դիզայնի նմուշը։

sobes.tech AI

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

Այո, Observer նմուշը հատուկ նախատեսված է մի քանի օբյեկտների տեղեկացումն ապահովելու համար սուբյեկտի վիճակի փոփոխությունների մասին: Այս նմուշում կա սուբյեկտ-օբյեկտ, որը պահպանում է դիտորդների (օբյեկտների) ցուցակը, որոնք գրանցված են նրա իրադարձությունների համար: Երբ սուբյեկտի վիճակը փոխվում է, նա հերթով տեղեկացնում է բոլոր գրանցվածներին:

Swift-ում օրինակ:

protocol Observer {
    func update()
}

class Subject {
    private var observers = [Observer]()

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

    func notify() {
        observers.forEach { $0.update() }
    }

    func changeState() {
        // վիճակի փոփոխություն
        notify() // բոլորին տեղեկացնել
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Հաղորդագրություն ստացվեց")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // երկու դիտորդներն էլ կստանան հաղորդագրությունը

Այսպիսով, Observer նմուշը հնարավորություն է տալիս իրականացնել բազմակի տեղեկացման մեխանիզմ։