ステージの参照とシングルトン #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でプライベートなコンストラクタを定義する

カテゴリー: 


Posted by scratchbrain at October 10, 2007 9:06 PM ブックマークに追加する

Trackback

Trackback URL for this entry:

Post a Comment


検索

このブログを検索

サイトコンセプト

レディオヘッド、Flash・ActionScript 3.0、Processing、アートに関すること。日記・雑感、読書感想など。
[SCRATCHBRAIN.NET ホーム]
[SCRATCHBRAIN プロフィール]
[お問い合わせ]
[Twitter]

リンク

  • 嫁と更新。レシピ、子育て
  • バルセロナ観光ガイド
  • ポケット・アナリシス
  • 洋楽ブックマーク
  • こんなライヴに行きました

広告

おすすめ

最近のエントリー

カテゴリー

タグクラウド

全てのエントリー一覧

RSSフィード

月別アーカイブ

powered by Movable Type

hosted by

あわせて読みたいブログパーツ