Tôi refactoring một số mã trong một dự án tôi đang làm việc trên và tôi chạy vào một lớn if/else if tuân theo định dạng:Refactoring trong Java, thay thế cho lượng lớn lệnh if
if (changer instanceof AppleChanger)
{
panel = new ApplePanel();
}
else if (changer instanceof OrangeChanger)
{
panel = new OrangePanel();
}
Bây giờ xung đầu tiên của tôi là tái cấu trúc nó bằng cách sử dụng đa hình để nó có dạng như
panel = changer.getChangerPanel();
Tuy nhiên, không may là gói lớp không có quyền truy cập vào gói bảng điều khiển.
xung tiếp theo của tôi là tạo ra một lớp PanelChooser với một phương pháp quá tải:
PanelChooser.getPanel(changer);
//Overloaded Method
public Panel getPanel(OrangeChanger changer)
{
Panel orangePanel = new OrangePanel();
return orangePanel;
}
public Panel getPanel(AppleChanger changer)
{
Panel applePanel = new ApplePanel();
return applePanel;
}
Đây có phải là một giải pháp tốt hoặc là có một cách tốt hơn để giải quyết này?
tôi nghi ngờ điều thứ hai sẽ không làm việc bởi vì bạn sẽ phải bỏ một cách rõ ràng sự thay đổi của trong vào một lớp con cho java để xác định phương thức gọi. bạn có thể sử dụng một lớp đăng ký/bản đồ (để thay đổi bản đồ thành các bảng và tìm kiếm với thể hiện được thông qua) có lẽ. – aishwarya
Tại sao tên lớp học của bạn bắt đầu bằng chữ thường? –
@U Mad Cảm ơn, là lỗi đánh máy của tôi, đã sửa – FooBar