2013/06/04

Java の Calendar は Singleton ではなくて Factory Method。

カレンダーを取得する際はCalendar.getInstance() でとる。このgetInstalnce()だけで、勝手にシングルトンだと思っていた。実際は Factory Method パターン でした。

ソースコードを見ると
Calendar#getInstance() -> Calendar#createCalendar(TimeZone zone, Locale aLocale) で言語、国なんかを判別して
  • new sun.util.BuddhistCalendar(zone, aLocale);
  • new JapaneseImperialCalendar(zone, aLocale);
  • new GregorianCalendar(zone, aLocale);
を new してインスタンス生成して返してる。

シングルトンだと思っていたから、 Calendar#add() とかして、アプリで使う Calendar インスタンスの時間ずれたらどうしようとか今更心配した・・・。大丈夫だった・・・。