¿qué haces cuando los objetos que pueden ser nulos tienen getters, y se usan en tu código? ¿Cómo sabes qué valor devolver por defecto?
¿Cómo sabes qué clases implementar? Esta es una pregunta de diseño, depende de la aplicación.
En general, el objetivo del patrón NullObject es admitir una refactorización Replace Conditional with Polymorphism en el caso especial donde el condicional es una comparación con el valor nulo del lenguaje de programación.
Una correcta implementación del ejemplo en el video requeriría la delegación del método driveCar
en las clases Car
. Las clases SlowCar
y FastCar
realizarían el ciclo, presumiblemente a través de una implementación compartida en una clase base, y el NullCar
volvería inmediatamente.
En un contexto de Java, el atributo NullCar.speed
probablemente sería un int sin casillero. Por lo tanto, establecerlo en null
no es una opción.Probablemente esconderé el atributo detrás del descriptor de acceso y haré que NullCar.getSpeed
presente una excepción. Cualquier código de cliente que necesitaría una prueba para evitar esta excepción pasaría a las clases de auto.
delegación de todas las operaciones que dependen directamente de un valor de velocidad que está disponible es una aplicación del principio Tell Don't Ask de diseño orientado a objetos mencionados por philippe
Creo que sería más exacto comentar que el contexto para el patrón Objeto nulo se cumple mejor con los tipos "tell, do not ask". Para los tipos que devuelven el valor, es más probable que se dirija a objetos de casos especiales. Posiblemente. –
Wow, un zen tao como pista de programación ... :-) – PhiLho