2013年12月10日火曜日

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

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

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



抽象インターフェース
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();
  }
 }
}


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

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

というイメージかな。



0 件のコメント:

コメントを投稿