Si consideri il seguente organizzazione delle classi:L'interfaccia deve definire valori di enum specifici dell'implementazione?
interface Restaurant
{
public void dine(Object dish);
}
class ItalianRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with spoon and forks
}
}
class ChineseRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with chopsticks
}
}
Dal momento che entrambi i ristoranti servono completamente diversi set di piatti, quello che sarà il modo corretto (design-saggio) per rappresentare il type
del dish
nell'interfaccia?
Sarà una buona decisione di progettazione definire un Enum elencando tutti i piatti - italiano e cinese - come parte dell'interfaccia e utilizzare tale Enum come type
per dish
?
Perché non un'interfaccia o una classe astratta 'Piatto'? – CollinD
Non dovrebbe essere affatto un enum. Se un ristorante thailandese attualmente serve Green Curry e Red Curry e poi vuoi aggiungere Yellow Curry come nuovo piatto, vuoi veramente che il ristorante contatti lo sviluppatore per chiedere di aggiungere Yellow Curry all'enum? No! I ristoranti dovrebbero essere in grado di definire nuovi piatti senza richiedere un cambio di codice. – Andreas