ステージの参照とシングルトン #2
October 10, 2007
まず、シングルトンを使うとどんな効果があるのか?
シングルトン試し1
サンプルソース
1.シングルトンじゃないクラス(Normal.as)とシングルトンのクラス(Singleton.as)を用意
Normal.as
package {
import flash.display.Sprite;
public class Normal extends Sprite{
public function Normal():void
{
init();
}
private function init():void
{
trace("普通");
}
}
}
Singleton.as
package
{
import flash.display.Sprite;
public class Singleton extends Sprite
{
public static var instance:Singleton;
public function Singleton( pvt:SingletonEnforcer )
{
init();
}
public static function getInstance():Singleton
{
if( instance == null ) instance = new Singleton( new SingletonEnforcer() );
return instance;
}
private function init():void
{
trace("シングルトン");
}
}
}
internal class SingletonEnforcer{};//internal 同じパッケージ内でのみ参照可能
2.ドキュメントクラス(Main.as)でそれぞれインスタンス化してみる
シングルトンじゃないクラスのインスタンス化
複数のインスタンスが作成され、それぞれコンストラクタが実行される。
var normal1:Normal = new Normal();// output: 普通
var normal2:Normal = new Normal();// output: 普通
シングルトンのクラス
singleton1のみコンストラクタが実行される。
//var singleton1:Singleton = new Singleton();//引数が渡せないのでこの形式でインスタンス化できない
var singleton1:Singleton = Singleton.getInstance();// output: シングルトン
var singleton2:Singleton = Singleton.getInstance();// 出力されない
シングルトン試し2
サンプルソース
1.シングルトンのクラス(Singleton.as)とシングルトンをインスタンス化しようとするクラス(Other.as)を用意
Singleton.as
試し1と同じ
Others.as
package {
import flash.display.Sprite;
public class Other extends Sprite{
public function Other():void
{
init();
}
private function init():void
{
// ___________________________________ インスタンス生成
// シングルトンのクラス
var singleton1:Singleton = Singleton.getInstance();// 出力されない
}
}
}
2.ドキュメントクラス(Main.as)でそれぞれインスタンス化してみる
Othersクラスではシングルトンのコンストラクタは実行されない。
Main.as
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main():void
{
init();
}
private function init():void
{
// ___________________________________ インスタンス生成
// シングルトンのクラス
var singleton1:Singleton = Singleton.getInstance();// output: シングルトン
// シングルトンをインスタンス化しようとしている別クラス
var other:Other = new Other();// 出力されない
}
}
}
これでだいたい挙動はわかった。
『シングルトンのクラスのコンストラクタは1回しか実行されない』
次は当初の目的通り、Stage参照のためにシングルトンを使ってみる。
参考URL
akihiro kamijo コンストラクタ (と Singleton)
pixelbreaker AS3.0 Better Singletons
Flex Coder [Flex]シングルトンの書き方
FumioNonaka.com ActionScript 3.0でプライベートなコンストラクタを定義する
カテゴリー:
Trackback
Trackback URL for this entry:

















