[AS][自分用]ActionScript3.0デザインパターンの読書メモ(6)
-テンプレートメソッドパターン
テンプレートメソッドとは、
汎用性のあるアルゴリズムを抽象メソッド(中身の無い定義だけのもの)として記述したもので、抽象クラス(インスタンス化を目的としない)内で定義される。
アルゴリズムの中身の具体的な定義は抽象メソッドをオーバーライドするときに定義する。
アルゴリズムの構造はテンプレートメソッドに保持される。
(後で)生成されるサブクラスで詳細を定義するような、”汎用的なアルゴリズム”を定義したいときに使う。
抽象クラスのひとつの使い方って感じなのかな?
テンプレートメソッドが記述されたクラスの例
package { public class AbstractGame { //インスタンス化を必要としないので、コンストラクタはいらない public function AbstractGame() { } //(finalメソッドは他のクラスからoverrideできない) //init()がテンプレートメソッドとなる public final function init(){ createField() createTeam("red"); createTeam("blue"); startGame(); } //直接実行した場合はエラーを投げる public function startGame():void{ throw new Error("Abstract Method!"); } //直接実行した場合はエラーを投げる public function createTeam(name:String):void{ throw new Error("Abstract Method!"); } //直接実行した場合はエラーを投げる public function createField():void{ throw new Error("Abstract Method!"); } } }
テンプレートメソッドを利用するクラスの例
package { //テンプレートメソッドを含んだクラスを継承 public class FootballGame extends AbstractGame { public function FootballGame() { } //AbstractGameクラス内のメソッドをオーバーライド public override function createField():void { trace("Create Field"); //ここに具体的な処理を書く } public override function createTeam(name:String):void { trace("Create Team"); //ここに具体的な処理を書く } public override function startGame():void { trace("start Game"); //ここに具体的な処理を書く } } }
これらを利用するためのドキュメントクラス
package { import flash.display.Sprite; public class FactoryExample extends Sprite{ public function FactoryExample() { //テンプレートメソッドのサブクラスのインスタンスを作る var game:FootballGame = new FootballGame(); //サブクラスから、スーパークラスのメソッド(init())を実行する。 game.init(); } } }
Tweet