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パターン

コメント

コメントの投稿

* コメントフィード

sidemenu

profile

s26

flasher

category

archive

recently

feed

RSS FEED

search