tokyo3.0

actionscript3.0 develop log written by s26

diary

デザインパターン

Decorator

2010512

デザインパターン:Decorator
目的:オブジェクトへ要素の追加を行う。(装飾する。)

 

デコレーションを目的としたクラス。
元となるinterfaceを作成

 

package{
	public interface IWidget{
		function getDescription():String{}
	}
}

 

文字列を返す。
この値に対して要素を作成する場合
下記の形になる。

 

package{
	public class WidgetA implement IWidget{
		public function WidgetA(){};
		public function getDescription():String{
			return "widgetA"
		}
	}
}

 

となって文字列「widgetA」を作成できる。
このようにしてwidgetB,widgetCなども作成できる。
ここまでは、decoratorクラスでなくて、ただのinterfaceです。
次に、抽象クラスを作成する。

 

package{
	public class WidgetDecorator implement IWidget{
		protected var decorated:IWidget;
		public function WidgetDecorator(widget:IWidget){
			decorated = widget
		};
		public function getDescription():String{
			return "α-"+decorated.getDescription()
		}
	}
}

 

というクラスを作成した時に
new WidgetDecorator(new WidgetA()).getDescription()
は「α-widgetA」を返す。

 

new WidgetA().getDescription()
は「widgetA」を返す。

 

同様にして
new WidgetDecorator(new WidgetB()).getDescription()
は「α-widgetB」を返す。

 

つまり、装飾(decoration)を
組み合わせで増やす事が出来るようになった。

 

更に、WidgetDecoratorを継承すると
また一つ付加する事ができる。

 

package{
	public class widgetPlus extends WidgetDecorator{
		protected var decorated:IWidget;
		public function widgetPlus(widget:IWidget){
			super(widget)
		};
		public function getDescription():String{
			return decorated.getDescription()+"_1"
		}
	}
}

 

new widgetPlus(new WidgetA()).getDescription()
は「α-widgetA_1」を返す。

 

装飾を行う上で、implementの方向性とextendsの方向性の
2つを持たせてあげる事で、
組み合わせの広がりを与える事が出来る。

参照:いつもの日記帳:Decoratorパターン

Singleton

2010512

デザインパターン:Singleton
目的:複数のクラスからアクセスでき、値を保持してくれるクラスを作る。

 

Singletonは複数のクラスから参照できる値を設定する事で
無駄な生成を抑える事や、値の引渡しを簡単にしてくれます。
コードは下記になります。

 

package {
	public class Singleton {
		public static var _instance:Singleton;
		public static function getInstance():Singleton {
			 if ( _instance == null ) {
				_instance = new Singleton;
			}
		return _instance;
	}
}

 

staticってなんだ?ってなる。
staticは「静的な」となじみのない言葉で表現をされるが、カンタンに言うと
「動的」の反対だから、「その場で生成されるものでない。」ので、
「ずっとそこにいるもの。」なのです。
外部からアクセスした時にも「そこにいる」のです。
つまり「動的」だといない事があるので、いつでもアクセスできる為に
「静的」staticに設定をしています。

 

getInstanceを行うと、Singletonのオブジェクトが生成されます。
一度生成されると、再度実行しても既に生成されたオブジェクトが
取得される設計になります。

 

ここが基本設計で、必要なものを足していきます。

 

package {
	public class Singleton {
		public static var _instance:Singleton;
		public static function getInstance():Singleton {
			if ( _instance == null ) {
				_instance = new Singleton;
			}
			return _instance;
		}
		private var _str:String = "something";
		public function set _str(_write:String):void{
			_str = _write;
		}
		public function get _str():String{
			return _str;
		}
	}
}

 

上記で示した形で、singletonの要素としての_strを用意する事で、
常にアクセスできるString(文字列)を作成できる。
Bitmapだろうと。なんだろうと。
参考:_level0:Singletonパターンを使ってどのシーンからも変数を参照できるようにする。

sidemenu

profile

s26

flasher

category

archive

recently

feed

RSS FEED

search