feb19.jp blog - life is creative!

AS2とAS3でSingletonクラスを作る

ブックマークに追加する tags:    

AS2とAS3でSingletonクラスを作る

各種DataManagerとか、レイアウト指定とか、SharedObjectとか、いろんなところに使えるデザインパターン「Singletonパターン」、AS2とAS3での実装例。

7.17更新! AS3版でコンパイルエラー出てました。。。すいません。asファイルからブログ用に書き直したときにarguments.calleeとしないといけない所を、arguments.callerとしていました。もし使おうと思って使っていただいた方にはご迷惑をおかけしました。。

ActionScript 2.0

使い方と、AS2のコードはこちら。

SingletonTest.as

class SingletonTest {
	private static var instance:SingletonTest;
	public static function getInstance():SingletonTest {
		if(SingletonTest.instance == null) {
			SingletonTest.instance = new SingletonTest();
		}
		return SingletonTest.instance;
	}
	private function SingletonTest() {
		init();
	}
	private function init():Void {
		//ここからいろいろ書く
	}
	//たとえば
	public var unko:Number = 20;
}

使い方

var st = SingletonTest.getInstance();
trace(st.unko);
st.unko = 21;
trace(st.unko);


ActionScript 3.0

AS3はコンストラクタ関数はprivate指定できないので、エラーを返すようにします。使い方はAS2と一緒。

SingletonTest.as

package {
	public class SingletonTest {
		private static var instance:SingletonTest;
		public static function getInstance():SingletonTest {
			if(instance == null) {
				instance = new SingletonTest(arguments.callee);
			}
			return instance;
		}
		public function SingletonTest(caller:Function = null) {
			if(caller != SingletonTest.getInstance) {
				throw new Error("SingletonTestクラスはSingletonクラスです。getInstance()メソッドを使ってインスタンス化してください。");
			}
			if(SingletonTest.instance != null) {
				throw new Error("SingletonTestインスタンスはひとつしか生成できません。");
			}
			
			init();
		}
		private function init():void {
			//ここからいろいろ書く
		}
	}
}

_parentとか、_rootとか使うぐらならSingletonを使ったほうがスマート。MovieClipとかの階層構造が基本的に関係ないから、階層構造をあとから変えてもコード変更しなくてよかったりしていろいろ便利ですよねん。コードの分離とかもできたりして、一石二鳥。

2008年06月19日21:25

Webデザインブログ

「AS2とAS3でSingletonクラスを作る」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/147

Navigation

古:MacBook Proを買いました。
新:FlashPlayer 10 beta 2 が出てる
トップページ

Recently Entries
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...
Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
Flex 用のライブラリとかを見ると mx パッケージとか使われてい...
Flash CS5 を予習 ~Text Layout Framework (TLF) 編~
Text Layout Framework (TLF) を使って、F...