Le motif pattern method
(BROUILLON, les textes ne sont pas finis)
Définition
Ce motif permet de garder vos objets au courant de l’etat d’un autre.
Principe
C’est le principe des mailling list puisque les objets viennent s’annoncer comme interessé pour recevoir des nouvelles d’un autre, et eventuellement plus tard dire que ça ne les interessent plus. Entre temps ils reçoivent des nouvelles en fonction de l’état de l’objet “observé”. En fait nous sommes les observeurs d’une mailling list sont état est change à chaque réception de courrier. Vous voyez, finalement vous connaissez déjà le principe de celui la, il nous entoure partout. On peut aussi faire un parallèle avec les abonnements à des magazines par exemple.
L’exemple par le code
Nous allons observer comment tenir au courant les fans de la rubyfanfare ;-).
Le système d’information central
Tout d’abord nous avons un système centrale pour communiquer notre actualité.
Pour mettre en place ce motif Ruby nous aide en nous fournissant un objet Observable. Cet objet vas nous permettre de définir notre serveur comme observable.
require 'observer'
class ServeurActu
include Observable
def publierUneInfo(info)
changed
print "---- Publication d'une info sur le serveur\n"
notify_observers(info)
end
def ajouterAbonnement(abonne)
add_observer(abonne)
end
def enleverAbonnement(abonne)
delete_observer(abonne)
end
end
Les abonnements
Ensuite nous avons deux type d’abonnements à nos nouvelles. Un par courrier standard, une sorte de programme, et un par mail car nous sommes moderne et à la pointe de la technologie.
require 'ServeurActu'
module TypeAbonnement
def update(info)
print "rien du tout ... \n"
end
def initialize(nom, serveur)
@nom = nom
@serveur = serveur
@serveur.ajouterAbonnement(self)
end
def annulerAbonnement
@serveur.enleverAbonnement(self)
end
end
class AbonnementParMail
include TypeAbonnement
def update(info)
print "Envoyer par mail à " + @nom + ": " + info + "\n"
end
end
class AbonnementParCourrier
include TypeAbonnement
def update(info)
print "Envoyer par courrier à " + @n om + ": " + info + "\n"
end
end
Le guichet
Voilà c’est là que les dinosaure nous rattrappe, nous avons juste un petit guichet pret d’un théatre pour inscrire nos abonnées. Il pourrais vous inscrire pour des informations par mail ou par courrier (comme défini au dessus) et s’arrangeras pour vérifier que tout ce passe bien.
require "ServeurActu"
require "TypeAbonnement"
serveur = ServeurActu.new
abonne1 = AbonnementParMail.new("Jean", serveur)
abonne2 = AbonnementParCourrier.new("Eric", serveur)
serveur.publierUneInfo("Nouvelle date de concert le 31/12/2005 !! à ne pas manquer")
abonne2.annulerAbonnement
abonne3 = AbonnementParCourrier.new("Georges", serveur)
abonne2 = AbonnementParMail.new("Eric", serveur)
serveur.publierUneInfo("sorti du disque prévu en mars 2006...")


