なんじゃくにっき

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

Scala de Design Pattern: Adapter

 Adapterパターン。
既存のクラスを変更せずに振る舞いを追加したい場合に使用する。
 
Scalaではnewするときにtraitを付与できるがその際に実装のない関数の中身も実装できる。

class Item(cost: Int) {
def getCost = cost
}

trait Price {
def getPrice: Int
}

object Main {
def main(args: Array[String]) {
val item = new Item(100) with Price { def getPrice = getCost * 2 }
println(item.getPrice) // 200
}
}

※この例でやってること:
・Itemクラスはcostを持つ
・getPriceという関数を付け加える
・この際Itemクラスは変更しない
・getPriceによって得られる値はcostの2倍