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