Retraso / Latencia? Llamo a BS por 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 la VM de HotSpot. No sé lo suficiente sobre la implementación de VM para confirmar o negar esto. Estaba basando mi comentario en C ++ implementación de funciones virtuales).
Hay algo de código sobrecarga. Debe crear todos los constructores de la clase base que desee, reenviando sus parámetros.
Tampoco lo veo como un antipatró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 contenga la colección y ofrezca una interfaz mejorada específica para cada caso? ¿Debe su 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 usar interfaces, no implementaciones, es decir, en un 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>
. No se WidgetCache
puede extender Map<String, Widget>
, porque esa es una interfaz. No puede ser una interfaz que extienda 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 convertirlo en una clase que se extienda HashMap<String, Widget>
, debe declarar las variables como WidgetCache
o Map<String, Widget>
, y el primero le pierde la flexibilidad para sustituir una colección diferente (tal vez una colección de carga diferida 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 cree que es un antipatrón, debería nombrarlo.