同等の機能を持ったSingletonクラスを多数と、色んな値を設定できる1つのクラス。比べてみたら差は出るだろうと思ったけど、これはひどいと思った。DateTimeではLocaleとTimeZoneはSingletonで、両方合わせて数百個ある。では、とりあえず100個のシングルトンと1個のクラスで100個のオブジェクトを作るとこんな感じ:
# 100 classes
daisuke@beefcake daisuke$ perl test.pl
Rate singleton regular
singleton 1205/s -- -12%
regular 1370/s 14% --
daisuke@beefcake daisuke$
ま、普通のクラスが速いのは当たり前だね。じゃあ1000個にすると・・・?
daisuke@beefcake daisuke$ perl test.pl
Rate singleton regular
singleton 85.5/s -- -40%
regular 143/s 67% --
daisuke@beefcake daisuke$
う、う、う、うぎゃあああああ!なんだこれ!なんだ、この67%って!なんだこの143/sって!さっきは毎秒1000回以上だったのに・・・
というわけでSingletonは必要な時にだけ使うのが正しいようです。今急に思い出したけど、Gang Of Four本にもたしかそんな事が書いてあったような気がする。