diseñar patrones de cómo evitar instanceOf cuando se utiliza la lista

majestuosa:

Imagine que tiene un menú con platos cada plato debe estar disponible en varios idiomas (Francés, Inglés, árabe, ...). La Dishclase contiene una lista con Languagelos objetos de texto.

class Dish { 
     List<Language> languages
     void addLanguage(Language lg){...}
}
class Language { getDescription(){}}

class French extends Language{}

class Menu {List<Dish> dishes }

¿Cómo evito usar instance ofcuando se desea una descripción de un lenguaje específico para ese plato?

Debería definir para cada idioma un método get en la clase de plato: getFrench (), getArabic () ..?

O debería mantenerlo en la lista y comprobar, por ejemplo, de la francesa haciendo un bucle en la lista y luego llamar getDescription()a este list object<language>?

¿O hay una manera para que un enfoque más polimórfica?

Eran :

No creo que sea una buena idea crear una clase separada para cada idioma. Después de todo, todas estas clases tendrán exactamente los mismos métodos.

Que haría uso de una sola Languageclase, y dentro de la Dishclase I a mantener una Map<Locale,Description>(me gustaría cambiar el nombre de la Languageclase a algo menos confuso como Description, ya que no representa un idioma, que representa una descripción en un idioma).

Ahora usted puede tener una

Description getDescription(Locale locale)

método en su Dishclase, que devolverá la descripción del plato en el lenguaje del pasado Locale.

Usted debe preferir el uso de clases de JDK estándar como java.util.Localelugar de clases personalizadas cuando sea posible.

Después de considerar los comentarios, y estar de acuerdo con algunos de ellos, sugiero retirar el Mapa la Descriptionclase.

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);
    }
}

También debe tener en cuenta que la búsqueda del lenguaje de descripción específica en una Mapes más eficiente que la búsqueda de ella en un List( O(1)tiempo de búsqueda en un HashMapvs O(n)tiempo de búsqueda en una List).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172498&siteId=1
Recomendado
Clasificación