なんじゃくにっき

プログラミングの話題中心。

Scala de Design Pattern: Flyweight

 Flyweightパターン。
小さいオブジェクトを使い回す。
 
あまりScalaっぽい書き方はできなかった・・
強いて言うならばpoolにインスタンスか存在するか調べるときにSomeとNoneを使うところか。

class Piyo(name: String) {
println(name)
}

object PiyoFactory {
var pool = Map[String, Piyo]()
def getPiyo(name: String) = {
pool.get(name) match {
case Some(piyo) => piyo
case None => {
val piyo = new Piyo(name)
pool += (name -> piyo)
piyo
}
}
}
}

object Main {
def main(args: Array[String]) = {
val piyoA = PiyoFactory.getPiyo("ぴよ1号") // "ぴよ1号"
val piyoB = PiyoFactory.getPiyo("ぴよ2号") // "ぴよ2号"
val piyoC = PiyoFactory.getPiyo("ぴよ3号") // "ぴよ3号"
val piyoD = PiyoFactory.getPiyo("ぴよ1号") // 出力ナシ
}
}