Паттерн Null Object

Паттерн Null Object

Паттерн Null Object является довольно простой концепцией ООП, но легко позволяет устранить ненужные условные конструкции и тем самым упростить понимание кода. Для этого и предназначен полиморфизм в первую очередь.

Идея паттерна Null Object заключается в том, что в качестве одной из реализаций некоторого интерфейса добавляется Null-класс, который обладает нейтральным поведением. Учтите, что он не может быть абстрактным, поскольку ожидается создание его экземпляров.

Рассмотрим принцип использование Null Object на примере. Предположим, что мы разрабатываем приложение для различных текстовых преобразований. Для этого определим следующий интерфейсный класс:

Реализуем на основе этого интерфейса класс, который приводит все символы входного текста к верхнему регистру:

Без паттерна Null Object мы уже можем воспользоваться соответствующей функциональностью:

Однако обратите внимание на проверку перед вызовом функции convert(). Она необходима, поскольку указатель converter может указывать на NULL. Чтобы избежать этой проверки, применим Null Object:

Теперь осталось принять условное соглашение о том, что указатель TextConverter* изначально должен быть инициализирован не NULL, а экземпляром класса NullTextConverter (или каким-нибудь другим конкретным экземпляром):

Главное в этой ситуации — не забывать инициализировать указатель с помощью Null-объекта, иначе вы быстро запутаетесь и в вашем коде появятся ошибки.

Однако стоит признать, что этот паттерн больше подходит для тех языков программирования, где предусмотрена сборка мусора (например, Java). Но и на С++ его можно вполне успешно применять.

Таким образом, паттерн Null Object удачно дополняет архитектуру ООП-программ. А в сочетании с другими структурными решениями позволяет упростить код и существенно сократить число проверок.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий