2010-10-10 4 views

ответ

12

Черта Proxy обеспечивает полезную основу для создания делегатов, но учтите, что это только обеспечивает реализацию методов в Any (equals, hashCode и toString). Вам придется реализовать любые дополнительные методы переадресации самостоятельно. Прокси часто используется с pimp-my-library pattern:

class RichFoo(val self: Foo) extends Proxy { 
    def newMethod = "do something cool" 
} 

object RichFoo { 
    def apply(foo: Foo) = new RichFoo(foo) 
    implicit def foo2richFoo(foo: Foo): RichFoo = RichFoo(foo) 
    implicit def richFoo2foo(richFoo: RichFoo): Foo = richFoo.self 
} 

В стандартной библиотеке также содержит набор признаков, которые являются полезными для создания коллекции прокси-серверов (SeqProxy, SetProxy, MapProxy и т.д.).

Наконец, в scala-инкубаторе есть плагин-компилятор (AutoProxy plugin), который автоматически реализует методы пересылки. См. Также this question.

+1

В настоящее время активная версия этого плагина является autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –

3

Похоже, вы использовали бы его, когда вам нужна функция Haskell's newtype.

Например, следующий код Haskell:

newtype Natural = MakeNatural Integer 
        deriving (Eq, Show) 

может примерно соответствовать следующим Scala код:

case class Natural(value: Int) extends Proxy { 
    def self = value 
} 
+0

Так это в основном механизмы для создания делегатов? –

+0

@JensSchauder, да. – missingfaktor

Смежные вопросы