Sha256: 42225fb390e9e3f079f7b2c9e6766e602b95e5a2e1cac80d95bf912cb4122efd

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true
# Паттерн Наблюдатель (Observer) - это поведенческий паттерн проектирования,
# который позволяет объектам следить и реагировать на изменения состояния других объектов.

# Наблюдаемый объект
class Observable
  attr_reader :observers

  def initialize
    @observers = []
  end

  def add_observer(observer)
    @observers << observer
  end

  def remove_observer(observer)
    @observers.delete(observer)
  end

  def notify_observers
    @observers.each { |observer| observer.update(self) }
  end

  def do_something
    puts "Наблюдаемый объект: сделал что-то!"
    notify_observers
  end
end

# Наблюдатель
class Observer
  def update(observable)
    puts "Наблюдатель: получил оповещение от #{observable.class.name}"
  end
end

# Пример использования
observable = Observable.new
observer = Observer.new

observable.add_observer(observer)

observable.do_something
# Вывод:
# Наблюдаемый объект: сделал что-то!
# Наблюдатель: получил оповещение от Observable

observable.remove_observer(observer)

observable.do_something
# Вывод:
# Наблюдаемый объект: сделал что-то!

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shanti555890-1.1.5 lib/source/database/observer.rb
shanti555890-1.1.4 lib/source/database/observer.rb