Le motif facade
Définition
Le motif Façade doit mettre à disposition une interface simplifié pour la manipulation d’un groupe d’objet correspondant à un sous-système.
Principe
Il suffit de réaliser un objet sachant manipuler tous les objets du sous-système. Les objets en question ne doivent en rien modifier leur comportement, ça permet justement de pouvoir continuer à les utilisé “à l’ancienne” pour certain besoin. Cette façon vas donc proposer une serie de méthode simple qui regrouperons une série d’appel aux bon objets, dans le bonne ordre.
L’exemple par le code
Un peu de domotique ? Nous allons en mettre dans notre maison, et piloté par Ruby s’il vous plait. Voyons ce que nous allons automatiser chez nous:
class Chauffage
def allume(piece)
puts "Le cahuffage s'allume dans la pièce #{piece}"
end
def reglage(piece,valeur)
puts "Le cahuffage est réglé sur #{valeur} dans la pièce #{piece}"
end
def eteindre(piece)
puts "Eteind le chauffage dans #{piece}"
end
def eteindre
puts "Eteind le chauffage dans toutes les pièces"
end
end
class Lumiere
def allume(piece)
puts "La lumière s'allume dans la pièce #{piece}"
end
def eteindre(piece)
puts "Eteind le chauffage dans #{piece}"
end
def eteindre
puts "Eteind la lumière dans toutes les pièces"
end
end
class Cafetiere
def allume
puts "le café se met en route"
end
def arret
puts "la cafétière s'arrète"
end
end
Bon c’est assez rudimentaire, mais pour commencer ça devrais suffire :)
Ceci represente donc notre sous système d’objet de la maison. Les porteset volets pourrais en être un autres, ou venir s’ajouter. L’arrosage automatique aussi, par contre le système de sauvegarde de nos données n’a pas grand chose à voir.
Essayons d’écrire notre façade pour la manipulation de ce système, la partie maison.
class Facade_control_maison
def initialize
@chauffage = Chauffage.new
@lumiere = Lumiere.new
@cafetiere = Cafetiere.new
end
def reveil
@chauffage.allume("salle de bain")
@chauffage.reglage("salle de bain",10)
@chauffage.allume("cuisine")
@cafetiere.allume
@lumiere.allume("salle de bain")
@lumiere.allume("cuisine")
@lumiere.allume("chambre")
end
def depart
@chauffage.eteindre
@lumiere.eteindre
@cafetiere.arret
end
def arrive
@lumiere.allume("salon")
@chauffage.allume("salon")
@chauffage.reglage("salon",8)
@chauffage.allume("chambre")
@chauffage.reglage("chambre",8)
end
end
On à mis en place 3 méthodes simple, une qui se déclenche au reveil, une pour le départ de la maison et une pour le retour à la maison. (pour les gens qui habite le sud, chauffage pourrais être remplacé par clim :) ).
Comme on peut le voir, c’est la façade qui sais ce qu’il faut faire dans chaque cas. Sans la façade, chaque objet déclenchant toute ces actions devrais décrire et sans les oublié chacun des objets Chauffage, Lumiere et Cafetiere un peu lourd, alors autant s’en passer avec la Façade ;-).
Une Façade n’est pas exclusive, on peut très bien appeler quand même l’objet Lumiere pour affiner un réglage particulier…
J’aoubliais, voici de quoi tester notre façade:
maison = Facade_control_maison.new maison.reveil maison.depart maison.arrive
Ce qui nous donnera:
Le cahuffage s'allume dans la pièce salle de bain Le cahuffage est réglé sur 10 dans la pièce salle de bain Le cahuffage s'allume dans la pièce cuisine le café se met en route La lumière s'allume dans la pièce salle de bain La lumière s'allume dans la pièce cuisine La lumière s'allume dans la pièce chambre Eteind le chauffage dans toutes les pièces Eteind la lumière dans toutes les pièces la cafétière s'arrète La lumière s'allume dans la pièce salon Le cahuffage s'allume dans la pièce salon Le cahuffage est réglé sur 8 dans la pièce salon Le cahuffage s'allume dans la pièce chambre Le cahuffage est réglé sur 8 dans la pièce chambre
A vos façades ;-)


