展开全部
不是单例模式。62616964757a686964616fe78988e69d8331333335343963可以用以下代码验证:Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
System.out.println(c1==c2); //结果是false,说明c1、c2不是同一个对象
不要被楼上的误导,并不是所有私有构造方法、对外通过getInstance方法提供实例的就是单例模式。
反编译jre中rt.jar,找到Calendar类源代码,可以看到Calendar.getInstance方法代码如下:public static Calendar getInstance(){
Calendar localCalendar = createCalendar(TimeZone.getDefaultRef(),Locale.getDefault());
localCalendar.sharedZone = true;
return localCalendar;
}
而createCalendar方法代码如下:private static Calendar createCalendar(TimeZone paramTimeZone, Locale paramLocale)
{
Object localObject = null;
String str = paramLocale.getUnicodeLocaleType("ca");
if (str == null)
{
if (("th".equals(paramLocale.getLanguage())) && ("TH".equals(paramLocale.getCountry()))) {
localObject = new BuddhistCalendar(paramTimeZone, paramLocale);
} else {
localObject = new GregorianCalendar(paramTimeZone, paramLocale);
}
}
else if (str.equals("japanese")) {
localObject = new JapaneseImperialCalendar(paramTimeZone, paramLocale);
} else if (str.equals("buddhist")) {
localObject = new BuddhistCalendar(paramTimeZone, paramLocale);
} else {
localObject = new GregorianCalendar(paramTimeZone, paramLocale);
}
return localObject;
}
很明显看出,其实内部还是通过new的手段得到实例,并不是单例模式