[[https://github.com/BlueInt32/design-patterns/blob/master/Commande/Invocateur.cs|Invocateur.cs]] using System; namespace Commande.ConsoleApp { /// /// INTERFACE DE COMMANDE (~abstrait) : implémentée par les commandes concrètes, ///elle fournit une/plusieurs méthodes de commandes /// abstraites, appelées par INVOCATEUR /// public interface ICommande { void executer(); void annuler(); } /// /// INVOCATEUR (~télécommande) : il contient une/des commandes concrète et les invoque en appelant leur méthode execute / annuler /// /!\ Il n'a aucune idée de la manière dont la lampe est allumée, d'ailleurs il ne sait meme pas si c'est une /// lampe ou une porte de garage, car chaque RECEPTEUR est encapsulé dans une COMMANDE CONCRETE /// public class TelecommandeSimple { ICommande emplacement; public TelecommandeSimple() { } public void SetCommand(ICommande commande) { emplacement = commande; Console.WriteLine(string.Format("Telecommande simple : set commande principal : {0}", commande.GetType())); } public void Go() { if (emplacement != null) emplacement.executer(); } public void Annuler() { if (emplacement != null) emplacement.annuler(); } } }