Singleton。
♪ that it's too late to apologize, it's too late
相変わらずドイツのSWR3聴いてると、やたら流れてくるので気に入ってしもた。
って、また Timbaland がらみかぁ。やっぱり好きだなぁ、彼のセンスは。
ところで、perlでシングルトンしたかったんで、ちょっと検索。
Apache::Singleton のソースをパクってメモ。
Class-Singletonがあるのは知ってるけど、それは置いておいて。
package Singleton;use strict;
sub getInstance {
my $class = shift;
no strict 'refs';
my $instance = "$class\::_instance";
unless (defined $$instance) {
$$instance = $class->_new_instance(@_);
}
return $$instance;
}
sub _new_instance {
my $class = shift;
my $param = {
'name' => undef
};
bless $param, $class;
}
sub getName {
my $class = shift;
return $class->{'name'};
}
sub setName {
my $class = shift;
my $name = shift;
$class->{'name'} = $name;
}
1;
__END__
これを使う側は、勿論、こんな感じ↓。
#!/usr/bin/perl -wuse strict;
use Singleton;
my $objSingletonFirst = Singleton->getInstance();
$objSingletonFirst->setName('anigon');
print $objSingletonFirst->getName."\n";
my $objSingletonSecond = Singleton->getInstance();
print $objSingletonSecond->getName(); # anigon と表示される
$objSingletonSecond->setName('ANIYAMA');
print $objSingletonFirst->getName()."\n"; # ANIYAMA と表示される
exit;
勿論、インスタンス化する際に、いつものように
Singleton->new(); とかやっても無駄です。