Advertisement
Sergio_The_Best

Command

Dec 12th, 2018
584
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.16 KB | None | 0 0
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         Programmer programmer = new Programmer();
  6.         Tester tester = new Tester();
  7.         Marketolog marketolog = new Marketolog();
  8.  
  9.         List<ICommand> commands = new List<ICommand>
  10.         {
  11.             new CodeCommand(programmer),
  12.             new TestCommand(tester),
  13.             new AdvertizeCommand(marketolog)
  14.         };
  15.         Manager manager = new Manager();
  16.         manager.SetCommand(new MacroCommand(commands));
  17.         manager.StartProject();
  18.         manager.StopProject();
  19.          
  20.         Console.Read();
  21.     }
  22. }
  23. interface ICommand
  24. {
  25.     void Execute();
  26.     void Undo();
  27. }
  28. // Класс макрокоманды
  29. class MacroCommand : ICommand
  30. {
  31.     List<ICommand> commands;
  32.     public MacroCommand(List<ICommand> coms)
  33.     {
  34.         commands = coms;
  35.     }
  36.     public void Execute()
  37.     {
  38.         foreach(ICommand c in commands)
  39.             c.Execute();
  40.     }
  41.  
  42.     public void Undo()
  43.     {
  44.         foreach (ICommand c in commands)
  45.             c.Undo();
  46.     }
  47. }
  48.  
  49. class Programmer
  50. {
  51.     public void StartCoding()
  52.     {
  53.         Console.WriteLine("Программист начинает писать код");
  54.     }
  55.     public void StopCoding()
  56.     {
  57.         Console.WriteLine("Программист завершает писать код");
  58.     }
  59. }
  60.  
  61. class Tester
  62. {
  63.     public void StartTest()
  64.     {
  65.         Console.WriteLine("Тестировщик начинает тестирование");
  66.     }
  67.     public void StopTest()
  68.     {
  69.         Console.WriteLine("Тестировщик завершает тестирование");
  70.     }
  71. }
  72.  
  73. class Marketolog
  74. {
  75.     public void StartAdvertize()
  76.     {
  77.         Console.WriteLine("Маркетолог начинает рекламировать продукт");
  78.     }
  79.     public void StopAdvertize()
  80.     {
  81.         Console.WriteLine("Маркетолог прекращает рекламную кампанию");
  82.     }
  83. }
  84.  
  85. class CodeCommand : ICommand
  86. {
  87.     Programmer programmer;
  88.     public CodeCommand(Programmer p)
  89.     {
  90.         programmer = p;
  91.     }
  92.     public void Execute()
  93.     {
  94.         programmer.StartCoding();
  95.     }
  96.     public void Undo()
  97.     {
  98.         programmer.StopCoding();
  99.     }
  100. }
  101.  
  102. class TestCommand : ICommand
  103. {
  104.     Tester tester;
  105.     public TestCommand(Tester t)
  106.     {
  107.         tester = t;
  108.     }
  109.     public void Execute()
  110.     {
  111.         tester.StartTest();
  112.     }
  113.     public void Undo()
  114.     {
  115.         tester.StopTest();
  116.     }
  117. }
  118.  
  119. class AdvertizeCommand : ICommand
  120. {
  121.     Marketolog marketolog;
  122.     public AdvertizeCommand(Marketolog m)
  123.     {
  124.         marketolog = m;
  125.     }
  126.     public void Execute()
  127.     {
  128.         marketolog.StartAdvertize();
  129.     }
  130.  
  131.     public void Undo()
  132.     {
  133.         marketolog.StopAdvertize();
  134.     }
  135. }
  136.  
  137. class Manager
  138. {
  139.     ICommand command;
  140.     public void SetCommand(ICommand com)
  141.     {
  142.         command = com;
  143.     }
  144.     public void StartProject()
  145.     {
  146.         if (command != null)
  147.             command.Execute();
  148.     }
  149.     public void StopProject()
  150.     {
  151.         if (command != null)
  152.             command.Undo();
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement