我有一个班级(例如Customer
)
其中包含字段name
和方法getName()
在这一刻,他们只有英文名称
但是,如果有任何新语言可用,我必须做好准备(例如法语名称)
似乎我应该使用Decorator
模式
但它没有使用该模式来“增加更多的责任”。
我应该只添加一个哈希表还是有更好的解决方案?
答案 0 :(得分:1)
如果它们有多个名称,那么HashMap将是一个合理的解决方案
public String getName(String lang) {
return names.get(lang)
}
(错误检查已删除)
如果您的客户有多个名称表示,那么其他实体也可能,并且您应该提取要在整个系统中使用的功能。
答案 1 :(得分:0)
不管语言如何,人们都不会拥有相同的名称吗?有时,不同语言的用户对口语的名称不同,并且在不同的脚本中以不同的方式编写。
如果你真的想要这种复杂性,你需要四个概念:客户,名称,代词和书面表达。客户HAS-A名称。名称是HAS-AN-ASSOCIATED本地代词,也许是HAS-ASSOCIATED替代发音。发音可能是使用国际音标(IPA)的文本表示。书面表示只是一个字符串。
这足以指出你正确的方向吗?
答案 2 :(得分:0)
我同意Brian 如果客户有多个名字。
如果您有英语,法语和德语客户,可能有地址(格式因国家/地区而异),您也可以使用界面:
interface Address {
void setStreet(String street);
void setPostalCode(String code);
}
interface Customer {
void setName(String name);
void setAddress(Address address);
}
public class EnglishAddress implements Address {
public void setPostalCode(String postalCode) {
// custom checking of the typical English zipcode format
}
...
}
public class FrenchAddress implements Address {
public void setPostalCode(String postalCode) {
// custom checking of the typical French zipcode format
}
}
public class EnglishCustomer implements Customer {
...
}
在这种情况下,您可以在Address和Customer上构建业务逻辑,并根据用户输入创建正确的类。可能通过使用Factory类,虽然这完全是可选的。
使用这种方法,您可以获得特定国家/地区的验证和元信息,而不会牺牲在客户和地址上运行的相当通用的业务逻辑的功能。
答案 3 :(得分:0)
我想知道它是否是同一个名字,但在不同的语言环境中显示不同?这是俄罗斯客户的屏幕将使用不同的字符集然后是美国人,所以显示美国人的名字将使用不同的字符。这是你面临的问题吗?