frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

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 -w

use 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(); とかやっても無駄です。