He sido cuestionado por un problema de diseño que trataré de describir a continuación.Un patrón de diseño para constructores
Supongamos que una clase, llámala A, tiene un constructor con un conjunto de parámetros. Dado que es agotador y sucio escribir todos esos parámetros en cada instanciación, he escrito otra clase, llamémosla StyleSheetA, que encapsula todos esos parámetros y es el único parámetro para el constructor de A. De esta manera, puedo preparar algunos valores predeterminados Las plantillas StyleSheetA se usarán más adelante y, si es necesario, puedo modificarlas.
Y en este punto, necesito extender A. Supongamos que B extiende A. B tendrá su propia hoja de estilo, concretamente StyleSheetB. Creo que será apropiado que StyleSheetB extienda StyleSheetA, así que con un parámetro de hoja de estilo, el constructor de B también puede construir su super clase A. Pero tengo miedo de la posibilidad de que este diseño tenga fallas. Por ejemplo, ¿qué sucede si decido agregar un getter/setter para la hoja de estilo? ¿Hay alguna forma novedosa de manejar todas estas situaciones? ¿Estoy en el camino equivocado? Para aquellos que están confundidos, adjunto un cierto código aquí:
class A
{
StyleSheetA ss;
A(StyleSheetA ss)
{
this.ss = ss;
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetA
{
int n1;
int n2;
// :
// :
int n100;
}
class B extends A
{
B(StyleSheetB ss)
{
super(ss);
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetB extends StyleSheetA
{
int n101;
int n102;
// :
// :
int n200;
}
Gracias por cualquier ayuda o sugerencias, también cualquiera de sus críticos se apreciará.
Editar: Estoy desarrollando en java me por lo que no hay soporte para genéricos.
No es evidente (para mí de todos modos) en qué idioma está desarrollando, pero generalmente los genéricos/plantillas pueden ayudar a resolver este problema. Al hacer que la clase A sea A, puede especificar el tipo de compuesto (por ejemplo, StyleSheetB) cuando se deriva de él: la clase B se extiende a A . Si no tiene esa característica, intente con C#;) –
Sí, su solución sería realmente un buen enfoque, pero lamentablemente desarrollé en java me y no hay soporte genérico en ella. Gracias. –
Debería agregar una etiqueta java-me. ;) – weltraumpirat