委譲
時折、コンポジションと転送の組み合わせがおおざっぱに委譲(delegation)と呼ばれることがあります。技術的には、ラッパーオブジェクトがラップしているオブジェクトへ自分自身を渡さない限り、委譲ではありません。
参考
hr.icon
Kotlinでは言語仕様の中にdelegationがあるんですが、個人的に結構きもいというか、うーん、という感じがある。koma.icon code:kotlin
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
fun main() {
val b = BaseImpl(10)
Derived(b).print()
}
Derivedの公開APIとしてBaseの公開APIがまるまる公開されるわけです。delegated propertiesというのもあるのですが、いずれにせよ、委譲先の公開APIを委譲元の公開APIとするという機能なんですよね。これが欲しくなる場面がないわけではないとは思うのですが、委譲ってそんなんだっけ・・・という気持ちになります。koma.icon