2010-10-21 33 views
9

Tôi đang viết câu hỏi này để duy trì đăng ký các mẫu thiết kế liên quan đến Scala, các mẫu tiêu chuẩn hoặc chỉ từ ngôn ngữ này.Mẫu thiết kế và Scala

câu hỏi Associated:

Nhờ tất cả những ai đóng góp

+0

Nhận ra rằng đã quá muộn, nhưng điều này thực sự nên là cộng đồng wiki –

+0

@ Đã đồng ý, tôi không nghĩ đây là câu hỏi SO-legal. Nhưng, tôi rất thích nhìn thấy câu trả lời và tôi hy vọng nó sẽ tiếp tục! – JAL

+0

Bạn cũng có thể muốn liên kết đến [câu hỏi này] (http://stackoverflow.com/questions/5566708/design-patterns-for-static-type-checking). – ziggystar

Trả lời

7

Hãy bắt đầu với các "mẫu Singleton" :

012.351.
object SomeSingleton //That's it 

tôi bổ sung sẽ đề nghị "mô hình Sử dụng chức năng-of-bậc cao" . Thay vì e. g. iterating thông qua một bộ sưu tập của mình, bạn cung cấp chức năng cho các phương pháp các lớp học cung cấp.

Trong Scala về cơ bản bạn nói những gì bạn có ý định làm:

//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 

Làm điều này trong Java sẽ có nghĩa là chạm vào các yếu tố của một bộ sưu tập cho mình và trộn logic ứng dụng của bạn với mã kiểm soát dòng chảy.

More information về các lớp Bộ sưu tập.


này đẹp EPFL paper về Không chấp Observer Pattern có thể quan tâm, quá.


Typeclasses là một cách tiếp cận để cấu trúc đặc điểm chung của các lớp học nơi thừa kế không thực sự phù hợp.

+2

Thật buồn khi "cấp" hoặc ngôn ngữ lập trình phổ biến là như vậy mà những ... cấu trúc ... phải được đưa ra và được gọi là "mẫu thiết kế" (như thể họ phải đảm bảo thêm bất kỳ gánh nặng nào :-) –

+2

"Mô hình sử dụng chức năng cao hơn" là Chiến lược của GoF – Synesso

+0

Để làm cho người độc thân dễ kiểm tra hơn, tốt hơn là nên bỏ một phần nếu không đầy đủ thực hiện trong một đặc điểm. // đang đặc điểm SomeSingleton { def doSomething1 {} lười biếng val VAL1 } đối tượng SomeSingleton kéo dài SomeSingleton – Nick