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

Shut the fuck up and write some code

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

FactoryMethodをAS2で書いてみた。

今回はFactoryMethodです。


AS2アクセス修飾子がpublic/privateの2種しかないからあまり厳密には書けてない。final/abstractもない。なのでcreateメソッドをfinalにすることが出来ないのでMainFactoryに継承させてもoverrideもせずそのまま使ってます。やっぱりこのあたりはJavaとは全然ちゃうなあ。しんどいぞ!
てか合ってるの?汎用性がないだけならいいんですが。あとFactoryクラスはインスタンス生成ではなく、Singletonにした方がいいかもしれないですな。

ソースは以下。


■Factoryクラス Factory.as

class Factory {
	
	public function Factory() {}
	
	public function create(name1:String,name2:String):Product {
		var p:Product = createProduct(name1,name2)
		return p 
	}
	
	public function createProduct(name1:String,name2:String) {}

}


■Productクラス Product.as

class Product {
	
	public function Product() {}
	
	public function getName() {}
}


■Factoryクラスを継承した MainFactory.as

class MainFactory extends Factory{
	
	public function MainFactory() {}
	
	public function createProduct(name1:String,name2:String):Product {
		return new MainProduct(name1,name2)
	}
	
}


■Productクラスを継承した MainProduct.as

class MainProduct extends Product{
	
	private var _recordname:String
	private var _bandname:String

	public function MainProduct(bandname:String,recordname:String) {
		_recordname = recordname
		_bandname = bandname
	}
	
	public function getName() :String{
		return _recordname + " / " +_bandname
	}
}


■実行

var FactoryRecords:Factory = new MainFactory()
var Bandname:String="New Order"
var FAC73:Product = FactoryRecords.create(Bandname,"BlueMonday")
var FAC93:Product = FactoryRecords.create(Bandname,"Confusion")
var FAC123:Product = FactoryRecords.create(Bandname,"Perfect Kiss")

trace(FAC73.getName())	
trace(FAC93.getName())	
trace(FAC123.getName())


■結果

BlueMonday / New Order
Confusion / New Order
Perfect Kiss / New Order