初心者プログラマーの覚え書き

web業界で働くプログラマーの覚え書きです。

[AS3]AS3でSingletonを実装

2009-02-15 22:27:53 | Flash
久しぶりの記事です。
最近AS3を触っているんですが、Singletonを使いたい場面が出てきました。

アクションフレームでクラスを生成してしまうと、
gotoAndPlayなどで再度同じフレームに来た時にクラスを生成し直してしまい、
クラス変数も初期化されてしまうんですよね。
その回避方法としてSingletonを使うことにしました。

他にもっと良い方法があるとは思うのだけど。。



Singletonクラス

//---------------------------------------
//Singleton
//---------------------------------------
package {
	import flash.display.*;
	
	public class Singleton {
		private var _cnt:int = 0;
		private var _limit:int = 0;
		public static var _singleton:Singleton = null;
	
		//---------------------------------------
		//コンストラクタ
		//呼び出し側でnewできてしまうがこの際気にしない
		//---------------------------------------
		public function Singleton() {
		}
		
		//---------------------------------------
		//_singletonにインスタンスが格納されている場合はそのまま返す
		//されてなければインスタンスを生成する
		//
		//@return
		//Singleton型インスタンス
		//---------------------------------------
		public static function getInstance():Singleton {
			
			if(_singleton === null) {
				_singleton = new Singleton;
			}
			return _singleton;
		}
		
		//---------------------------------------
		//ループのリミットを設定
		//---------------------------------------
		public function getLimit(limit:int) {
			_limit = limit;
		}
		
		//---------------------------------------
		//カウント実行
		//
		//@return
		//true	まだ平気
		//false	リミットに達した
		//---------------------------------------
		public function executeCnt():Boolean {
			_cnt++;
			if(_cnt >= _limit)	{
				return false;
			} else {

				return true;
			}
		}
	}
}





Singletonを呼び出すコード(アクションフレームでループさせる)
var cnt:Singleton = Singleton.getInstance(); cnt.getLimit(10); trace(cnt.executeCnt());




あとで色々調べていたら
http://unbland.org/blog/2008/10/23/160.html
こんなの発見しました。

public static var _singleton:Singleton = null;

public static var _singleton:Singleton = new Singleton;
にしてしまえばかなりシンプルなコードですむんですね。
デメリットもあるみたいだけど、シンプルでわかりやすい!

コメントを投稿