Kotlinとスプラトゥーンで学ぶデザインパターン【5. Singleton】
最近チャージャーに限界を感じてきました。特にガチホコだと思わぬ奇襲を受けやすいです。
奇襲に対処できるチャージャーになりたい。
Singleton パターンとは
Singletonとは対象のクラスが絶対に1つしか存在しないことを保証するデザインパターンです。
今回は、ダウニーの上位互換ことスパイキーをSingletonパターンで表現してみました。
スパイキーはゲソタウンで指定したギアの受け取りをしてくれます。
当たり前ですが、スパイキーは一人(匹?)しかいないです。
複数いたらどのスパイキーからギアを受け取ればいいかわからなくなりますね。
実装
Spiky.kt
class Spiky { private constructor() {} var delivery: Delivery? = null companion object { val spiky = Spiky() fun getInstance(): Spiky { return spiky } } fun receiveDelivery(delivery: Delivery) { this.delivery = delivery } fun requestReceiveOrder() { delivery?.let { println(it.name + "が届いてるぜ!") } ?: println("そんなものはない") } }
まずはスパイキークラス。コンストラクタをプライベートにして外部からインスタンス化できないようにして、
インスタンスはクラス内で生成しgetInstanceで渡すようにしてます。
あとは配達物が届いてるか判定して文字を出力します。セリフは雑です。
Delivery.kt
data class Delivery(val id: Int, val name: String)
配達物のデータクラスです。良い英語が思いつかなかった・・・
Main.kt
val spiky = Spiky.getInstance() spiky.requestReceiveOrder() spiky.receiveDelivery(Delivery(1, "ガチガサネ")) val spiky2 = Spiky.getInstance() spiky2.requestReceiveOrder()
スパイキーを2回生成するようにして同じインスタンスを参照できているか確認します。
別インスタンスであればspikey2には配達物が届いてないことになります。