Invocateur.cs

using System;
 
namespace Commande.ConsoleApp
{
  /// <summary>
  /// 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
  /// </summary>
  public interface ICommande
  {
    void executer();
    void annuler();
  }
 
  /// <summary>
  /// 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
  /// </summary>
  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(); }
  }
}