Strategy-паттерн

Posted: 4 января, 2011 in .NET, Паттерны
    #region Strategies
    public enum LoggingStrategy
    {
        Console,
        Trace
    }
    #endregion

    #region Service
    public class LoggingService
    {
        private readonly Dictionary<LoggingStrategy, ILogger> _strategies = new Dictionary<LoggingStrategy, ILogger>();

        public LoggingService()
        {
            DefineStrategies();
        }

        public void LogMessage(LoggingStrategy strategy, string message)
        {
            _strategies[strategy].LogMessage(message);
        }

        public void LogError(LoggingStrategy strategy, string errorMessage)
        {
            _strategies[strategy].LogMessage(errorMessage);
        }

        private void DefineStrategies()
        {
            _strategies.Add(LoggingStrategy.Console, new ConsoleLogger());
            _strategies.Add(LoggingStrategy.Trace, new TraceLogger());
        }
    }
    #endregion

    #region Loggers
    public interface ILogger
    {
        void LogMessage(string message);
        void LogError(string errorMessage);
    }

    public class ConsoleLogger : ILogger
    {
        public void LogMessage(string message)
        {
            System.Console.WriteLine(String.Format("Message: {0}", message));
        }
        public void LogError(string errorMessage)
        {
            System.Console.WriteLine(String.Format("Error: {0}", errorMessage));
        }
    }

    public class TraceLogger : ILogger
    {
        public void LogMessage(string message)
        {
            System.Diagnostics.Trace.WriteLine(String.Format("Message: {0}", message));
        }
        public void LogError(string errorMessage)
        {
            System.Diagnostics.Trace.WriteLine(String.Format("Error: {0}", errorMessage));
        }
    }

Оставьте комментарий