feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3 で GoF デザインパターン [10] - Strategy

ActionScript 3.0 で Gang of Four デザインパターン [10] - Strategy パターン

アルゴリズムを状況によってそっくり入れ替えるパターン。

流体モーションを作成するときに流れに抵抗する際は A というアルゴリズムが働き多少の抵抗があるが、一度流されてしまえば抵抗のない B、流され切ったとき点滅させる処理 C というような動きにするときや、ゲームなどで AI キャラクターの動作を定義しておいて状況によって選択的に変更するといったときに使えると思います。

そんな素敵なインタラクションは例にしていませんが、サンプルです。

IStrategy.as
package jp.feb19.gof.strategy
{
	public interface IStrategy
	{
		function execute():void
	}
}
Plan.as
package jp.feb19.gof.strategy
{
	public class Plan
	{
		private var _strategy:IStrategy;
		
		public function Plan(plan:IStrategy)
		{
			_strategy = plan 
		}
		
		public function execute():void
		{
			_strategy.execute();
		}
	}
}
WeekdayPlan.as
package jp.feb19.gof.strategy
{
	public class WeekdayPlan implements IStrategy
	{
		public function WeekdayPlan()
		{
		}
		
		public function execute():void
		{
			trace("programming");
		}
	}
}
HolidayPlan.as
package jp.feb19.gof.strategy
{
	public class HolidayPlan implements IStrategy
	{
		public function HolidayPlan()
		{
		}
		
		public function execute():void
		{
			trace("more programming");
		}
	}
}

テストクラス。

StrategyTest.as
package jp.feb19.gof.strategy
{
	import flash.display.Sprite;
	
	public class StrategyTest extends Sprite
	{
		public function StrategyTest()
		{
			super();
			
			var plan:Plan;
			
			if (new Date().day == 0)
			{
				// Sunday
				plan = new Plan(new HolidayPlan());
			}
			else
			{
				plan = new Plan(new WeekdayPlan());
			}
			
			plan.execute();
		}
	}
}
出力:
programming

State パターンと似ていると思います。

Tweet Share Bookmark

Navigation

prev: AS3 で GoF デザインパターン [09] - Bridge
next: AS3 で GoF デザインパターン [11] - Composite

Recently Entries