Diciamo che ho una classe Widget
. Ho anche TextWidget
, ComboWidget
, ChoiceWidget
classi ereditate dalla classe Widget
.
Creo questi widget in base alla situazione. Dopo aver creato il widget, mostro solo alcuni dati sul widget e ne ottengo uno dall'utente. Dopo questo il widget viene distrutto. Il mio codice corrente è qualcosa del genere: (Il codice è totalmente arbitrario)
Widget createWidget(DataType type, Data data) {
Widget widget;
if (type == DataType.Text) {
widget = new TextWidget();
widget.setText(data.toStrig());
} else if (type == DataType.Choice) {
widget = new ChoiceWidget();
widget.setChoices(data.toChoices())
} else if (type == DataType.MultiText)
widget = new ComboWidget();
widget.setItems(data.toItems())
}
return widget;
}
Dopo la creazione, ottengo alcuni dati dall'utente che utilizza quel widget. Quindi lo distruggo.
void widgetReturnPressedEvent(Widget widget) {
UserData data;
if (widget.type() == TextWidget)
data.setText(((TextWidget)widget).getText())
// ...
// You get the idea.
}
Lo sto utilizzando in diverse parti del mio programma. Così facendo se-else ogni volta non è un buon modo per gestire questa situazione. Quindi cosa dovrei fare qui? Può qualcosa del genere funziona, o c'è un buon schema per questa situazione?
class DataWidget {
Widget widget;
Widget createWidget(DataType type) {
Widget w;
//...
this.widget = w;
}
void setData(Data data) {
if (this.widget == TextWidget)
this.widget.setText(data.toString());
//...
}
Data getData() {
Data data;
// set data
return data;
}
Widget widget() {
return this.widget;
}
}