読者です 読者をやめる 読者になる 読者になる

Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

StrategyをAS2で実装してみる。

flashlite3.0 flashlite2.0 AS2

Strategyを3パターン用意する例で書いてみた。

■インターフェース Strategy.as

interface Strategy {
	
	public function play():String
	
}


■サブクラスstrategyA strategyA.as

class StrategyA implements Strategy {
	
	private var _record:String
	
	public function StrategyA() {}
	
	public function play() :String{
		_record = "gameform"
		return _record
	}
	
}


■サブクラスstrategyB strategyB.as

class StrategyB implements Strategy{
	
	private var _record:String
	
	public function StrategyB() {}
	
	public function play() :String{	
		_record = "DC10"
		return _record
	}	
}


■サブクラスstrategyC strategyC.as

class StrategyC implements Strategy{
	
	private var _record:String
	
	public function StrategyC() {}
	
	public function play() :String{
		_record = "Orange"
		return _record
	}	
	
}


■Strategyを持つクラスPerson person.as

class person {
	
	private var _name:String
	private var _strategy:Strategy
	
	public function person(name:String, strategy:Strategy) {
		
		_name = name
		_strategy = strategy
		
	}
	
	public function getName():String {
		return _name
	}
	
	public function play():String {
		
		var _record:String = _strategy.play()
		return _record
		
	}
	
}


■実行

/*strategy*/
var dj1:person = new person("Beltram", new StrategyA())
var dj2:person = new person("Lekebusch", new StrategyB())
var dj3:person = new person("Hawtin", new StrategyC())

/*実行*/
trace(dj1.getName() + "は" + dj1.play() + "をplayした")
trace(dj2.getName() + "は" + dj2.play() + "をplayした")
trace(dj3.getName() + "は" + dj3.play() + "をplayした")


■結果

Beltramはgameformをplayした
LekebuschはDC10をplayした
HawtinはOrangeをplayした


インターフェイスStrategyを作ってそれを実装することでstrategyA〜CをStrategyのサブクラスとする。
strategyを別クラスに委譲させることで実装、別のStrategyにも切り替え可能にする。


strategy=戦略という意味からは外れてるサンプルで、使い方として違うよう気がしなくもないわけでもないが、どうしたものか。