BorisKotlyar

Decorator

Feb 26th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.15 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Decorator
  4. {
  5.     public abstract class Writer
  6.     {
  7.         public abstract void Write(string message);
  8.     }
  9.  
  10.     public class BasicWriter : Writer
  11.     {
  12.         public override void Write(string message)
  13.         {
  14.             // nothing
  15.         }
  16.     }
  17.  
  18.     public abstract class WriterDecorator : Writer
  19.     {
  20.         protected Writer Writer;
  21.  
  22.         protected WriterDecorator(Writer writer)
  23.         {
  24.             Writer = writer;
  25.         }
  26.  
  27.         public override void Write(string message)
  28.         {
  29.             Writer.Write(message);
  30.         }
  31.     }
  32.  
  33.     public class ConsoleLogWriter : WriterDecorator
  34.     {
  35.         public ConsoleLogWriter(Writer writer) : base(writer) { }
  36.  
  37.         public override void Write(string message)
  38.         {
  39.             base.Write(message);
  40.  
  41.             Console.WriteLine("ConsoleLogWriter:" + message);
  42.         }
  43.     }
  44.  
  45.     public class FileLogWriter : WriterDecorator
  46.     {
  47.         public FileLogWriter(Writer writer) : base(writer) { }
  48.  
  49.         public override void Write(string message)
  50.         {
  51.             base.Write(message);
  52.  
  53.             Console.WriteLine("FileLogWriter:" + message);
  54.         }
  55.     }
  56.  
  57.     public class WriterController
  58.     {
  59.         public void Write(Writer writer, string message)
  60.         {
  61.             if (writer != null)
  62.             {
  63.                 writer.Write(message);
  64.             }
  65.             else
  66.             {
  67.                 Console.Write("No writers");
  68.             }
  69.         }
  70.     }
  71.  
  72.     class Program
  73.     {
  74.         public static bool UseConsole = true;
  75.         public static bool UseFile = true;
  76.  
  77.         static void Main(string[] args)
  78.         {
  79.             var writerController = new WriterController();
  80.             var basicWriter = new BasicWriter();
  81.  
  82.             Writer writer = null;
  83.  
  84.             if (UseConsole)
  85.                 writer = new ConsoleLogWriter(basicWriter);
  86.  
  87.             if (UseFile)
  88.                 writer = new FileLogWriter(writer);
  89.  
  90.             if (writer != null)
  91.                 writerController.Write(writer, "my message");
  92.  
  93.             Console.ReadKey();
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment