Está en la página 1de 3

2.14. NULL OBJECT [Woolf97] 2.14.1.

Objetivo Facilita una alternativa para utilizar null para indicar la ausencia de un objeto al que delegue una operacin. Utilizando null para indicar la ausencia de cada uno de los objetos requeridos se realiza una pregunta para ver si es null antes de cada llamada a los mtodos de otros objetos. En lugar de utilizar null, el patrn Null Object utiliza una referencia a un objeto que no hace nada. 2.14.2. Aplicabilidad Una clase delega una operacin a otra clase. La clase que delega normalmente no presta atencin sobre como la otra clase implementa la operacin. Sin embargo, algunas veces se requiere que la operacin sea implementada sin hacer nada. Si quieres que la clase que delega la operacin la delegue en todos los casos, incluyendo el caso de no hacer nada. No quieres que el caso de no hacer nada requiera ningn cdigo especial en la clase que delega. 2.14.3. Solucin El diagrama de clases que muestra la organizacin de las clases que participan en el patrn Null Object es el siguiente:

A continuacin estn las descripciones de los papeles que juegan la clase en la organizacin citada anteriormente: Gua de construccin de software en Java con patrones de diseo Francisco Javier Martnez Juan Pgina 102

Delegador Una clase en este papel participa en el patrn Null Object para delegar una operacin a una clase abstracta o a un interface. Se realiza la delegacin sin tener responsabilidad sobre el caso de no hacer nada de una operacin. Esta simplicidad da por hecho que el objeto en el que delega encapsular el comportamiento correcto, incluso si este es no hacer nada. OperacionAbstracta Una clase en el papel Delegador delega una operacin a una clase en el papel OperacionAbstracta. Las clases en este papel no tienen porque ser necesariamente abstractas. Un interface puede tambin cumplir este papel. OperacionReal Las clases en este papel implementan la operacin que la clase Delegador delega a la clase OperacionAbstracta. OperacionNull Las clases en este papel proporcionan una implementacin para no hacer nada de la operacin que la clase Delegador delega a la clase OperacionAbstracta. 2.14.4. Consecuencias El patrn Null Object desahoga una clase que delega una operacin a otra clase con la responsabilidad de implementar la versin de no hacer nada de esa operacin. Esto tiene como consecuencia un cdigo ms simple que no tiene que tener un test por null antes de llamar al mtodo que implementa la operacin delegada. Resulta un cdigo ms fiable porque el patrn Null Object elimina algunos casos de crear bugs (errores en los programas) por omitir el test por null en el cdigo. El comportamiento de no hacer nada encapsulado por una clase en el papel OperacionNull es reutilizable, si hay un comportamiento consistente de no hacer nada que funciona para todas las clases Delegador. El patrn Null Object incrementa el nmero de clases en el programa. Si no hay todava una clase o interface en el papel de OperacionAbstracta, entonces el patrn Null Object podra introducir ms complejidad al introducir clases adicionales que lo alejan de la simplificacin del cdigo. 2.14.5. Implementacin Es frecuente el caso de que instancias de las clases OperacionNull no contengan informacin de instancias especficas. Cuando se esta en este caso, puedes ahorrar tiempo y memoria implementando la clase OperacionNull como una clase singleton.

Gua de construccin de software en Java con patrones de diseo Francisco Javier Martnez Juan Pgina 103 2.14.6. Patrones relacionados Singleton Si las instancias de una clase OperacionNull no contienen informacin de instancias especficas, entonces puedes ahorrar tiempo y memoria implementando la clase OperacionNull como una clase singleton. Strategy El patrn Null Object se utiliza frecuentemente con el patrn Strategy.

También podría gustarte