Null object (Шаблон проектирования)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

В объектно-ориентированном программировании Null Object — это объект с определенным нейтральным («null») поведением. Шаблон проектирования Null Object описывает использование таких объектов и их поведение (или отсутствие такового). Впервые опубликован в серии книг Pattern Languages of Program Design.[1]

Описание[править | править исходный текст]

В таких объектно-ориентированных языках как Java или C# объекты могут иметь значение NULL. Ссылки на такие объекты нуждаются в проверке на NULL-значение перед использованием, так как методы класса «нулевого» объекта, как правило, не могут вызываться.

Целью Null-object является инкапсулирование отсутствия объекта путем замещения его другим объектом, который ничего не делает.

Данный шаблон проектирования рекомендуется ипользовать, когда:

  • Объект требует взаимодействия с другими объектами. Null Object не устанавливает нового взаимодействия — он использует уже установленное взаимодействие.
  • Какие-то из взаимодействующих объектов должны бездействовать
  • Требуется абстрагирование «общения» с объектами, имеющими NULL-значение.[2]

Структура[править | править исходный текст]

На диаграмме классов в языке UML шаблон проектирования представлен следующим образом:

Null Object.svg

Пример[править | править исходный текст]

/* Пример применения шблона Null Object :
 */
 
void Main()
{
	AbstractEntity realEntity = new RealEntity();
	realEntity.doSomething(); // RealEntity::doSomething
 
	AbstractEntity unkwonEntity = new NullEntity();
	unkwonEntity.doSomething(); // NullEntity::doSomething
}
 
// Define other methods and classes here
public abstract class AbstractEntity
{
	public abstract void doSomething();
}
 
public class RealEntity: AbstractEntity
{
	public override void doSomething()
	{
		Console.WriteLine("RealEntity::doSomething");
	}
}
 
 
public class NullEntity: AbstractEntity
{
	public override void doSomething()
	{
		Console.WriteLine("NullEntity::doSomething");
	}
}

Примечания[править | править исходный текст]

  1. Woolf Bobby Pattern Languages of Program Design 3. — Addison-Wesley, 1998.
  2. http://sourcemaking.com/design_patterns/null_object SourceMaking Tutorial

Ссылки[править | править исходный текст]