action scriptでテンプレートメソッド
デザインパターンとは、過去のソフトウェア開発者が見つけた設計のノウハウのことです。
デザインパターンウィキペディア
将棋、囲碁でいう定石のようなものですね。
テンプレートメソッドはデザインパターンの一つで、何度も使う処理をまとめたり、
初期化処理、計算処理などコードを読みにくくする複雑な処理を別クラスにまとめ、
ソースを読みやすくすることができます。
●テンプレートメソッドの実装
action script3.0では、インタフェースは変数定義ができないので使い勝手が悪いです。
このためクラスとオーバーライドを用いて、テンプレートメソッドを実装します。
●親クラス
package { import flash.events.MouseEvent; import flash.display.Sprite; public class MouseClickBase extends Sprite{ //描画、マウスハンドラ用 private var child:Sprite; public function MouseClickBase():void { child = new Sprite(); child.focusRect = false; //背景クリア child.graphics.beginFill(0xffffff); child.graphics.drawRect(0,0,720,540); child.graphics.endFill(); addChild(child); //イベント追加 child.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); } //クリックしたところに赤のサークルを描く private function mouseDownHandler(evt:MouseEvent):void { child.graphics.beginFill(0xff0000); DrawInterFace(); child.graphics.endFill(); } protected function DrawInterFace():void { } protected function CircleDraw():void { child.graphics.drawCircle(mouseX,mouseY,20); } protected function RectDraw():void { child.graphics.drawRect(mouseX,mouseY,10,10); } } }
●円を描く場合
package { public class MouseClickCircle extends MouseClickBase{ public function MouseClickCircle():void { } protected override function DrawInterFace():void { CircleDraw(); } } }
●四角を描く場合
package { public class MouseClickRect extends MouseClickBase{ public function MouseClickRect():void { } protected override function DrawInterFace():void { RectDraw(); } } }
MouseClickCircle、MouseClickRect、両者ともに余分なコードがなく非常に見やすいです。
また円、四角の書き換えも容易に行うことが出来るようになりました。