Sha256: 8896edfa896e41861e558c96e14bed64450f50fc800b99c534bab619319d8a2e
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
# frozen_string_literal: true # Класс Наблюдаемый объект class Subject attr_reader :state, :observers def initialize(state) @state = state @observers = [] end def add_observer(observer) observers << observer end def remove_observer(observer) observers.delete(observer) end def notify_observers observers.each do |observer| observer.update(self) end end def update_state(state) @state = state notify_observers end end # Класс Наблюдатель class Observer def update(subject) puts "Subject has updated state to: #{subject.state}" end end # Создаем объекты Наблюдаемый объект и Наблюдатель subject = Subject.new("initial state") observer = Observer.new # Добавляем наблюдателя к наблюдаемому объекту subject.add_observer(observer) # Обновляем состояние наблюдаемого объекта subject.update_state("new state") # Результат выполнения: # Subject has updated state to: new state
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
mc_gem-0.0.1 | Lab2/examples/observer_example.rb |
mvcStudentXD-1.2.1 | Lab2/examples/observer_example.rb |