Cho một hệ thống phân cấp lớp như sau:Làm thế nào để trả về thể hiện mới của lớp con trong khi khởi tạo lớp cha?
class A
def initialize(param)
if param == 1 then
#initialize and return instance of B
else
#initialize and return instance of C
end
end
end
class B < A
end
class C < A
end
Có thể thực sự khởi tạo và trả về một thể hiện của B
hoặc C
khi khởi A
? I E. my_obj = A.new(param)
sẽ dẫn đến my_obj
là một phiên bản của lớp B
hoặc C
tùy thuộc vào giá trị của param
, được kiểm tra trong A.initialize(param)
.
Trong ví dụ của tôi, nó chỉ được biết khi chạy mà lớp con (B
hoặc C
) để sử dụng và lớp cha (A
) về cơ bản chưa bao giờ thực sự được sử dụng. Tôi nghĩ rằng có thể là một ý tưởng tốt để di chuyển logic quyết định liệu B
hoặc C
vào tổ tiên chung của chúng.
Nếu điều này là không thể (hoặc kiểu xấu), tôi nên đặt séc param
và quyết định bắt đầu lớp học ở đâu?
Các câu hỏi tương tự đã được trả lời trước đây.Những gì bạn có thể tìm kiếm là phương pháp nhà máy. Có một cái nhìn tại http://stackoverflow.com/questions/1515577/factory-methods-in-ruby Tôi đoán câu trả lời tại http://stackoverflow.com/a/1515580/1128705 sẽ phù hợp với nhu cầu của bạn. –