Нулевой объект (Null object)

Нулевой объект – это объект с заданным нейтральным поведением, использование которого позволяет заменить условные операторы полиморфизмом.

Рассмотрим следующий пример. Пусть имеется система классов для протоколирования и метод-фабрика, возвращающий в зависимости от параметра объект заданного класса.

public abstract class BaseLogger

{

public abstract void Write(string logEntry);

}

public class FileLogger: BaseLogger

{

public override void Write(string logEntry)

{

Console.WriteLine(logEntry + "is written into the file");

}

}

public class EmailLogger: BaseLogger

{

public override void Write(string logEntry)

{

Console.WriteLine(logEntry + "is sent by email");

}

}

public static class LoggerFactory

{

public static BaseLogger GetLogger(string name)

{

switch (name)

{

case "file":

return new FileLogger();

case "email":

return new EmailLogger();

default:

return null;

}

}

}

Использование кода в указанном виде приводит к условным операторам, обеспечивающим корректное поведение в том случае, если метод GetLogger() вернул значение null.

BaseLogger logger = LoggerFactory.GetLogger("abc");

if (logger!= null)

{

logger.Write("message");

}

else

{

Console.WriteLine("Cannot write in the log");

}

Устранить условные операторы поможет введение специального класса с поведением по умолчанию:

public class DefaultlLogger: BaseLogger

{

public override void Write(string logEntry)

{

Console.WriteLine("Cannot write in the log");

}

}

public static class LoggerFactory

{

public static BaseLogger GetLogger(string name)

{

switch (name)

{

case "file":

return new FileLogger();

case "email":

return new EmailLogger();

default:

return new DefaultlLogger();

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: