Tôi muốn tạo ra trường hợp đối tượng có loại được xác định bởi dữ liệu thời gian chạy:scala động xác định loại
trait Business
case class Business1() extends Business
case class Business2() extends Business
object Business {
def fromData(data:Array[Byte]): Business = data(0) match {
case 1 => new Business1
case 2 => new Business2
case _ => throw new RuntimeException("data error")
}
}
Đoạn mã trên có thể làm công việc của mình nhưng có một vấn đề mà nó được đóng lại. Bất cứ khi nào tôi triển khai lớp con mới Business
, tôi sẽ phải sửa đổi mã Business.fromData
, ví dụ:
case 3 => new Business3
Làm thế nào tôi có thể xác định Business.fromData
một lần và sau đó có thể thêm Business3
, Business4
mà không cần đăng ký với nó?
Sửa
cuối cùng tôi nhận ra rằng đây là một trường hợp sử dụng hoàn hảo của Multimethod
, có nghĩa là, cử dựa trên chức năng của một số đối số. Vì vậy, câu hỏi tổng quát hơn nên là "Làm thế nào để thực hiện đa phương thức trong scala"? Tôi tin rằng các mẫu thiết kế chỉ tồn tại vì ngôn ngữ không có khả năng, đó là lý do tại sao tôi không muốn chấp nhận câu trả lời của nhà máy.
tôi sẽ ghi vào địa ngục để gợi ý phản chiếu java? :) –