Kotlinとスプラトゥーンで学ぶデザインパターン【4. Factory Method】
昨日前夜祭で久しぶりのスプラトゥーンを満喫してました。
エイムも操作もひどいことになってました。
しばらくはリハビリ期間になりそうです・・・
Factory Methodパターンとは
Factory Methodパターンは、インスタンスの作り方をスーパークラスで定め、実際にインスタンス化する処理はサブクラスに分けて実装するパターンです。
今回は、サーモンランの敵を題材にしました。登場から攻撃までの処理を実装します。
実装
まず枠組みとなるスーパークラスを2つ定義します。
Factory.kt
abstract class Factory { fun create() : Enemy { var enemy = createEnemy() deployToMap(enemy) return enemy } abstract fun createEnemy() : Enemy abstract fun deployToMap(enemy: Enemy) }
Enemy.kt
abstract class Enemy { abstract fun attack() abstract fun move() abstract fun appear() }
Factoryでは生成してからマップに配置するまでの処理を行なっています。
次に具象クラスです。バクダンという敵をインタンス化します。
BakudanFactory.kt
class BakudanFactory : Factory() { override fun createEnemy(): Enemy { return Bakudan() } override fun deployToMap(enemy: Enemy) { enemy.appear() } }
Bakudan.kt
class Bakudan : Enemy() { override fun attack() { println("爆弾を発射!") } override fun move() { println("ちょっと移動") } override fun appear() { println("バクダンが現れた!") } }
実行結果
バクダンが現れた! ちょっと移動 爆弾を発射!