在我们项目的早期,我们创建了一个Locale类,其中包含一个字符串,例如“en-US”,我们可以从中派生国家和语言以及其他一些信息。
我们现在面临的问题是我们正在创建太多的Locale对象。这些对象几乎被用作参数或Dictionary / HashSet键。在进行一些分析之后,我们意识到我们花了太多时间创建这些Locale对象。
知道我们有一组有限的语言环境并且这些对象是不可变的,你建议用什么模式将对象的数量保持在最小值?
答案 0 :(得分:2)
您可以使用Factory pattern通过某些索引创建对象并返回缓存的实例(假设您的对象是不可变的,否则返回共享副本会很危险)。
即。遵循CultureInfo.GetCultureInfo实现,该实现具有通过其中一个键返回实例的工厂方法。
public static CultureInfo GetCultureInfo(string name)
使用指定的区域性名称检索文化的缓存只读实例。
答案 1 :(得分:1)
你想要做的是缓存。有几种方法可以实现它,但一般的想法是有一些存储所有以前创建的本地的结构,而不是创建一个新的,你首先搜索该集合。
您可以选择创建Dictionary<string, Locale>
。该字符串将是“en-US”之类的字符串。每次要创建新的Locale
时,请先检查它是否在Dictionary
中。如果是的话,就回来吧。如果没有,实际上新建一个并将其放入Dictionary
。
public static class LocaleFactory
{
private static Dictionary<string, Locale> cache = new Dictionary<string, Locale>();
public static Locale GetLocal(string localeString)
{
Locale output;
if (cache.TryGetValue(localeString, out output))
{
return output;
}
else
{
output = new Locale(localeString);
//do other creation stuff for the Locale
cache.Add(localeString, output);
return output;
}
}
}
答案 2 :(得分:0)
你可以有类似的东西:
class Locale {
static Locale en;
static Locale de;
...
static Locale getLocale(string local){
//checking if the wanted local already exists and return it or instance it
}
};
像单身但有点不同