Sto lavorando con un modello che attualmente assomiglia a questo:
class Sign {
enum Type { A, B }
Color color;
String textLine1;
String textLine2;
Type type;
Sign(Type type, Color color, String textLine1, String textLine2) { ... }
}
Un segno di tipo A
ha un colore e 2 righe di testo. Un segno di tipo B
ha un colore e solo 1 riga di testo. Pertanto sono istanziati in questo modo:
Sign signA = new Sign(A, someColor, "line1", "line2");
Sign signB = new Sign(B, someColor, "line1", null);
Quando si lavora con queste istanze, il codice controlla la proprietà type
e legge i campi appropriati.
Penso che questo approccio potrebbe essere difettoso in quanto un segno B
non dovrebbe esporre proprietà che non mantiene (riga2). È anche antiestetico passare il null
a un gruppo di proprietà a cui non interessa al momento dell'istanziazione.
Mi chiedo se sarebbe appropriato utilizzare l'ereditarietà invece, dove una classe base conterrebbe i campi condivisi e il tipo.
abstract class Sign {
enum Type { A, B }
Color color;
String textLine1;
Type type;
Sign(Type type, Color color, String textLine1) { ... }
}
class SignA extends Sign {
String textLine2;
SignA(Color color, String textLine1, String textLine2) {
super(A, color, textLine1);
this.textLine2 = textLine2;
}
}
class SignB extends Sign {
SignB(Color color, String textLine1) {
super(B, color, textLine1);
}
}
Questo modello è raccomandato per modellare modelli di questo tipo? Nota che questi modelli non hanno alcun comportamento e sono puramente di proprietà.