Lag / Latencia? Llamo a BS sobre eso. Debe haber exactamente cero sobrecarga de esta práctica. ( Editar: Se ha señalado en los comentarios que esto puede, de hecho, inhibir las optimizaciones realizadas por el HotSpot VM. No sé lo suficiente sobre la implementación de VM para confirmar o negar esto. Estaba basando mi comentario en la implementación de C ++ de funciones virtuales.)
Hay una sobrecarga de código. Debe crear todos los constructores de la clase base que desee, reenviando sus parámetros.
Tampoco lo veo como un anti-patrón, per se. Sin embargo, lo veo como una oportunidad perdida. En lugar de crear una clase que derive la clase base solo por cambiar el nombre, ¿qué tal si crea una clase que contiene la colección y ofrece una interfaz mejorada, específica para cada caso? ¿Debería tu caché de widgets realmente ofrecer la interfaz completa de un mapa? ¿O debería ofrecer una interfaz especializada?
Además, en el caso de las colecciones, el patrón simplemente no funciona junto con la regla general de uso de interfaces, no implementaciones, es decir, en el código de colección simple, crearía un HashMap<String, Widget>
y luego lo asignaría a una variable de tipo Map<String, Widget>
. Su WidgetCache
no puede extender Map<String, Widget>
, porque eso es una interfaz. No puede ser una interfaz que amplíe la interfaz base, porque HashMap<String, Widget>
no implementa esa interfaz, y tampoco lo hace ninguna otra colección estándar. Y si bien puede convertirla en una clase que extiende HashMap<String, Widget>
, entonces tiene que declarar las variables como WidgetCache
o Map<String, Widget>
, y la primera le pierde la flexibilidad para sustituir una colección diferente (tal vez alguna colección de carga lenta de ORM) , mientras que el segundo tipo de derrota el punto de tener la clase.
Algunos de estos contrapuntos también se aplican a mi clase especializada propuesta.
Estos son todos los puntos a considerar. Puede o no ser la elección correcta. En cualquier caso, los argumentos ofrecidos por su colega no son válidos. Si él piensa que es un anti-patrón, debería nombrarlo.