テンプレートメソッド、ファクトリーパターン

テンプレートメソッドパターン

大本の汎用的なアルゴリズムを記述したテンプレートクラス



抽象インターフェース
package factory
{
public interface IField
{
// 「フィールドを描く」というメソッドを定義
function drawField():void;
}
}

実装クラス
package factory
{
public class FootballField implements IField
{
public function FootballField()
{
}

public function drawField():void
{
trace('Drawing the Football Fieald!');
}
}
}

抽象テンプレートクラス
package factory
{
/**
* テンプレートメソッド抽象クラス
*
*/
public class BaseGame
{
public function BaseGame()
{
}

public function initialize():void
{
// 無処理
}

public function createField():IField
{
throw new Error('createField:Abstract Methd!');
}
}
}

継承クラス
package factory
{
/**
* テンプレートメソッドを継承するクラス
*
*/
public class FootballGame extends BaseGame
{
public function FootballGame()
{
super();
}

override public function initialize():void
{
var field:IField = createField();
field.drawField();
}

override public function createField():IField
{
return new FootballField();
}
}
}


コードだけでは理解するのが難しいので、クラス図を書いたほうがいい。

「テンプレートとなる抽象クラスで処理のアルゴリズムを書き、
抽象インターフェースで各処理の詳細を記述していく」

というイメージかな。