feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3 で GoF デザインパターン [09] - Bridge

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

委譲を利用して、処理と機能を分離し、階層分けして、クラスを効率的に増やしていけるようにするパターンです。

Windows と Mac と Linux を対象にしたユーザーインターフェースを実装するとき、同じ処理でもアルゴリズムや見た目を変えたいときに、普通に実装してしまうと WindowsButton.as WindowsTextField.as ... となってしまいますが、Windows.as と Button.as を分けて考えられるようにする事で処理と機能を分ける、みたいな考え方です。

wikipedia の説明が死ぬほど分かりやすいのでオススメです。
それをそのまま実装してみました。

Material.as
package jp.feb19.gof.bridge
{
	public class Material
	{
		public function Material()
		{
		}
	}
}
Dishware.as
package jp.feb19.gof.bridge
{
	public class Dishware
	{
		private var _material:Material;
		public function Dishware(material:Material)
		{
			_material = material;
		}

public function get material():Material
{
return _material;
}

}
}

Material のサブクラス

Wood.as
package jp.feb19.gof.bridge
{
	public class Wood extends Material
	{
		public function Wood()
		{
			super();
		}
	}
}
Glass.as
package jp.feb19.gof.bridge
{
	public class Glass extends Material
	{
		public function Glass()
		{
			super();
		}
	}
}

Dishware のサブクラス

Plate.as
package jp.feb19.gof.bridge
{
	public class Plate extends Dishware
	{
		public function Plate(material:Material)
		{
			super(material);
		}
		
		public function toString():String
		{
			return this.material + " plate";
		}
	}
}
Bowl.as
package jp.feb19.gof.bridge
{
	public class Bowl extends Dishware
	{
		public function Bowl(material:Material)
		{
			super(material);
		}
		
		public function toString():String
		{
			return this.material + " bowl";
		}
	}
}

テストクラスです。

BridgeTest.as
package jp.feb19.gof.bridge
{
	import flash.display.Sprite;
	
	public class BridgeTest extends Sprite
	{
		public function BridgeTest()
		{
			super();
			
			var bowl:Bowl = new Bowl(new Glass());
			trace(bowl);
		}
	}
}
出力:
[object Glass] bowl
Tweet Share Bookmark

Navigation

prev: AS3 で GoF デザインパターン [08] - Abstract Factory
next: AS3 で GoF デザインパターン [10] - Strategy

Recently Entries