Не думаю, что это хорошая идея - создавать отдельный класс для каждого языка. В конце концов, все эти классы будут иметь одинаковые методы.
Я бы использовал один класс Language
, а внутри класса Dish
я оставлю Map<Locale,Description>
(я бы переименовал класс Language
во что-то менее запутанное, например Description
, так как он не представляет язык, он представляет описание на каком-то языке).
Теперь вы можете иметь
Description getDescription(Locale locale)
метод в вашем Dish
классе, который будет возвращать описание блюда на языке переданного Locale
.
Вы должны по возможности использовать стандартные классы JDK, такие как java.util.Locale
, вместо пользовательских классов.
После рассмотрения комментариев и согласования некоторых из них я предлагаю исключить Map
из класса Description
.
class Dish
{
Description description = new Description ();
void addDescription(Locale locale, String text)
{
description.addText(locale,text);
}
String getDescription(Locale locale)
{
return description.getText(locale);
}
}
class Description
{
Map<Locale,String> descriptions = new HashMap<>();
public void addText(Locale locale,String text)
{
descriptions.put(locale,text);
}
public void getText(Locale locale)
{
return descriptions.get(locale);
}
}
Следует также отметить, что поиск описания конкретного языка в Map
более эффективен, чем его поиск в List
(O(1)
времени поиска в HashMap
против O(n)
времени поиска в List
).