想象一下,你有菜单,每道菜应该有多种语言(法语,英语,阿拉伯语……). dish类包含一个包含语言类型对象的列表.
class dish { List<Language> languages void addLanguage(Language lg){...} } class Language { getDescription(){}} class french extends Language{} class Menu {List<dish> dishes }
如果想要对该菜肴进行特定语言的描述,我该如何避免使用?
我应该为每种语言定义一个类中的get方法:getfrench(),getarabic(),..?
或者我应该将其保留在列表中并通过循环列表检查法语的实例,然后在此列表对象上调用getDescription()< 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中搜索它更有效(HashMap中的O(1)查找时间与List中的O(n)查找时间相比).
原文地址:https://www.jb51.cc/java/120798.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。