2010-10-21 22 views
9

Piszę to pytanie, aby zachować rejestr wzorców projektowych związanych ze Scala, wzorcami standardów lub tylko z tego języka.Wzorce projektowe i Scala

zagadnień związanych:

Dziękujemy wszystkim, którzy przyczyniają

+0

Zdajemy sobie sprawę, że jest już za późno, ale to naprawdę powinno być wiki społecznościowe –

+0

@Dave Zgoda, nie sądzę, że jest to pytanie zgodne z SO. Ale jestem bardzo zainteresowany widząc odpowiedzi i mam nadzieję, że to będzie trwało! – JAL

+0

Możesz również zamieścić link do [tego pytania] (http://stackoverflow.com/questions/5566708/design-patterns-for-static-type-checking). – ziggystar

Odpowiedz

7

zacznijmy z "Singleton" :

object SomeSingleton //That's it 

ja dodatkowo proponuje "wzór using-funkcje-of-wyższego rzędu" . Zamiast e. sol. Iterując przez kolekcję samodzielnie, podajesz funkcje metodom zapewnianym przez klasy.

W Scali można w zasadzie powiedzieć, co zamierza zrobić:

//declare some example class 
case class Person(name: String, age: Int) 

//create some example persons 
val persons = List(Person("Joe", 42), Person("Jane", 30), Person("Alice", 14), Person("Bob", 12)) 

//"Are there any persons in this List, which are older than 18?" 
persons.exists(_.age > 18) 
// => Boolean = true 

//"Is every person's name longer than 4 characters?" 
persons.forall(_.name.length > 4) 
// => Boolean = false 

//"I need a List of only the adult persons!" 
persons.filter(_.age >= 18) 
// => List[Person] = List(Person(Joe,42), Person(Jane,30)) 

//"Actually I need both, a list with the adults and a list of the minors!" 
persons.partition(_.age >= 18) 
// => (List[Person], List[Person]) = (List(Person(Joe,42), Person(Jane,30)),List(Person(Alice,14), Person(Bob,12))) 

//"A List with the names, please!" 
persons.map(_.name) 
// => List[String] = List(Joe, Jane, Alice, Bob)  

//"I would like to know how old all persons are all together!" 
persons.foldLeft(0)(_ + _.age) 
// => Int = 98 

Robi to w Javie oznaczałoby dotykania elementów kolekcji siebie i mieszać logiki aplikacji z kodem kontroli przepływu.

More information o klasach kolekcji.


Ten miły EPFL paper o deprecjację Wzorzec Obserwator może być interesujące, too.


Typeclasses są jedno podejście do struktury cech wspólnych zajęć gdzie dziedziczenie naprawdę nie pasuje.

+2

To smutne, że "poziom" lub wspólny język programowania jest taki, że te ... konstrukcje ... muszą być wyprowadzone i zwane "wzorami projektowymi" (tak, jakby powinny zapewniać dodatkowe obciążenie :-) –

+2

"Korzystanie z funkcji wyższego rzędu" to strategia GoF – Synesso

+0

Aby uczynić singletons bardziej testowalnym, zawsze lepiej jest zostawić częściowe, jeśli nie pełne wdrożenie w cechę. // kod cecha SomeSingleton { def doSomething1 {} leniwa Val wart1 } Przedmiotem SomeSingleton rozciąga SomeSingleton – Nick

Powiązane problemy