Ruby Language Observateur


Exemple

Le modèle d'observateur est un modèle de conception logicielle dans lequel un objet (appelé subject ) conserve une liste de ses dépendants (appelés observers ) et les avertit automatiquement de tout changement d'état, généralement en appelant l'une de ses méthodes.

Ruby fournit un mécanisme simple pour implémenter le modèle de conception Observer. Le module Observable fournit la logique pour informer l'abonné de tout changement dans l'objet Observable.

Pour que cela fonctionne, l'observable doit affirmer qu'il a changé et en informer les observateurs.

Les objets observant doivent implémenter une méthode update() , qui sera le rappel de l'observateur.

Implémentons une petite discussion, où les utilisateurs peuvent s'abonner aux utilisateurs et quand l'un d'eux écrit quelque chose, les abonnés sont avertis.

require "observer"

class Moderator
  include Observable

  def initialize(name)
    @name = name
  end

  def write
    message = "Computer says: No"
    changed
    notify_observers(message)
  end
end

class Warner
  def initialize(moderator, limit)
    @limit = limit
    moderator.add_observer(self)
  end
end

class Subscriber < Warner
  def update(message)
    puts "#{message}"
  end
end

moderator = Moderator.new("Rupert")
Subscriber.new(moderator, 1)
moderator.write
moderator.write

Produire la sortie suivante:

# Computer says: No
# Computer says: No

Nous avons déclenché la méthode write à la classe Moderator deux fois, en avertissant ses abonnés, dans ce cas-ci un seul.

Plus nous ajoutons d'abonnés, plus les changements se propageront.