Tôi không thể tìm ra một giải pháp tốt hơn cho vấn đề của mình. Tôi có một bộ điều khiển xem trình bày một danh sách các yếu tố. Các phần tử đó là các mô hình có thể là một thể hiện của B, C, D, v.v. và kế thừa từ A. Vì vậy, trong trình điều khiển khung nhìn đó, mỗi mục sẽ chuyển đến một màn hình khác nhau của ứng dụng và chuyển một số dữ liệu khi người dùng chọn một trong số chúng . Hai lựa chọn thay thế xuất hiện trong đầu tôi là (xin vui lòng bỏ qua cú pháp, nó không phải là một ngôn ngữ cụ thể)
1) chuyển đổi (tôi biết rằng hút)
//inside the view controller
void onClickItem(int index) {
A a = items.get(index);
switch(a.type) {
case b:
B b = (B)a;
go to screen X;
x.v1 = b.v1; // fill X with b data
x.v2 = b.v2;
case c:
go to screen Y;
etc...
}
}
2) đa hình
//inside the view controller
void onClickItem(int index) {
A a = items.get(index);
Screen s = new (a.getDestinationScreen()); //ignore the syntax
s.v1 = a.v1; // fill s with information about A
s.v2 = a.v2;
show(s);
}
//inside B
Class getDestinationScreen(void) {
return Class(X);
}
//inside C
Class getDestinationScreen(void) {
return Class(Y);
}
Vấn đề của tôi với giải pháp 2 là vì B, C, D, v.v. là các mô hình, nên họ không nên biết về các nội dung liên quan đến chế độ xem. Hay họ nên trong trường hợp đó?