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));
        }
    }
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s