что вы делаете, когда объекты, которые могут быть нулевыми, имеют геттеры и используются в вашем коде? Как узнать, какое значение вернуть по умолчанию?
Как узнать, какие классы реализовать? Это вопрос дизайна, это зависит от приложения.
Вообще говоря, целью шаблона NullObject является поддержка рефакторинга Replace Conditional with Polymorphism в особом случае, когда условное выражение - это сравнение с нулевым значением языка программирования.
Для правильной реализации примера в видео потребуется делегировать метод driveCar
классам Car
. Классы SlowCar
и FastCar
будут выполнять цикл, предположительно через общую реализацию в базовом классе, а NullCar
просто вернется немедленно.
В контексте Java атрибут NullCar.speed
, вероятно, будет unboxed int. Так что установка null
не вариант. Я, вероятно, скрыл бы атрибут за аксессором, и NullCar.getSpeed
поднял бы исключение. Любой клиентский код, который должен был бы пройти тест, чтобы избежать этого исключения, вместо этого переместился бы в классы автомобилей.
Передача всех операций, которые напрямую зависят от доступного значения скорости, является применением принципа не спрашивать принципа объектно-ориентированного проектирования, упомянутого philippe