Commo solo se C++ (y poco) el ejerccio lo planteo en C++. Pero como hablamos de patrones entiendo que da igual el lenguaje. Lo propongo porque lo creo interesante...
Supongamos una clase mensaje. Esta clase tiene varios constructores. Buffer y tamaño, otro void, otro solo un buffer de tamaño fijo que es una cabecera...
void msg(char* pBuffer, DWORD dwSize)
void msg()
void msg(char* pHeader)
El mensaje tiene un tamaño maximo N. Que en principio esta harcodeado de forma que cuando se crea el objeto se comprueba que el buffer no exceda ese tamaño.
Todo bien. Tengo un cerro de lineas, de mensajes, una logica coherente. Supongamos que funciona.
Ahora como siempre, LLega el listo del Jefe y te dice que eso no puede ir harcoded que si el mensaje crece, que hay que adaptarse sin compilar. Asi que , tachan!!! Esta constante se lee de un fichero de configuracion. Asi todos los mensajes tendrian el mismo limite, y este limite se podria variar segun necesidades del sistema.
Y Empieza el baile:
Si el fichero se lee en los constructores cada vez que se instancia una clase se va al fichero. Pero esto no mola porque es lento. Muy lento. Lentisimo.
Si el cliente que construye el objeto le comuniqua un nuevo parametro que sea el tamaño limite. No mola, porque entonces se deja a la divina providencia el que todos los mensajes tengan el mismo limite. No me fio de ningun programata que no sea yo. Como cualquier programmador
y Ademas hay que cambiar el interfaz de los constructores. Y eso tampoco mola, porque tenemos N mil lineas, objetos, clases y funciona (por una vez y sin que sirva de precedente)
si usamos un clase prototipo y establecemos metodos para fijar lo que se fija en los constructores, mediante setters. hay que odificar el codigo. El jefe feliz porque consiguio amargar la vida al currito, pero al modificar el codigo que chutaba el riesgo es grande. Y el currito no quiere ni hacer horas ni comerse el marron de toquetear por todo el codigo.
Gustariame por tanto algo mas elegante, una especie de superclase sobre el mensaje que tenga el limite. Quiza un decorator????
Se admiten soluciiones cretivas y eleganttes...