A veces, cuando extiendo una de mis propias clases, quiero (para el propósito de la subclase) "inyectar" una o dos líneas de código en el medio de un método en la superclase.Métodos protegidos "stub" usados solo para propósitos primordiales considerados buenas prácticas o no?
En estos casos, algunas veces agrego una llamada a un método vacío protegido para que la subclase se sobrescriba. código
- ¿Es esta forma de "apertura" de las subclases de "inyectar":
public void superClassMethod() { // some fairly long snippet of code doSubclassSpecificStuff(); // some other fairly long snippet of code } // dummy method used for overriding purposes only! protected void doSubclassSpecificStuff() { }
Al hacer esto varias veces en la misma clase, debo decir que parece dejar de fumar torpes/feo así que mis preguntas en medio de métodos considerados buenas prácticas o no?
- ¿El patrón (anti-patrón?) Se llama algo?
- ¿Se ha utilizado en cualquier API/biblioteca bien conocida? (Tenga en cuenta que estoy hablando de clases no abstractas.)
- ¿Hay mejores alternativas?
La única alternativa que puedo llegar a es utilizar algo así como el patrón de comando y tienen un setMiddleOfMethodHandler(SomeRunnableHandler)
, y llamar a handler.doSubclassSpecificStuff()
lugar del maniquí-método. Sin embargo, tiene algunos inconvenientes, como lo veo, como no poder tocar los datos protegidos.
Hago esto todo el tiempo, especialmente para "frameworks" donde las súper clases se encargan de muchas tareas domésticas/de fontanería. Creo que ha sido algo bueno, así que tengo curiosidad por las respuestas que recibirás. –