2012年2月14日火曜日

scalaで簡単Proxyクラス実装。

ProxyデザインパターンやDecoratorデザインパターンを使いたいことがよくあると思いますが、いちいちすべてのメソッドを実装するのはめんどくさいですよね?
そんな時に便利なscalaの実装を紹介


class User(var id : Long,var name : String,var gender : Int)

class ProxyUser(private val user : User){
def name : String = if(gender == 1) "Mr. " + user.name else "Ms. " + user.name
}

object ProxyUser{
implicit def toUser(proxyUser : ProxyUser) = proxyUser.user
}



Companion objectにimplicit conversionを指定しておくだけで完了。
あとは、ProxyしたりDecorateしたりしたいメソッドを定義してやるだけでOK。

使い方はこんな感じ

val pu = new ProxyUser(new User(1,"Taro",1))

println("ID:" + pu.id)
println("name:" + pu.name)
pu.name = "Joro"
println("name:" + pu.name)

> ID:1
> name:Mr. Taro
> name:Mr. Jiro

0 件のコメント:

コメントを投稿