Tôi đang làm việc trên một ứng dụng GUI tạo tệp cấu hình. Tôi có một hệ thống phân cấp lớp cho mô hình cấu hình và tôi sử dụng một cây đối tượng của hệ thống phân cấp đó trong một số bối cảnh khác nhau. Hiện tại, tôi sử dụng mẫu Khách truy cập để tránh gây ô nhiễm các lớp mô hình của mình bằng mã cụ thể theo ngữ cảnh.
interface IConfigurationElement {
void acceptVisitor(IConfigurationElementVisitor visitor);
}
Trong phiên bản trước, tôi đã sử dụng chuỗi instanceof
điều kiện thay vì Khách truy cập. So sánh hai cách tiếp cận tôi thấy các giao dịch sau.
Khách thăm quan
- Nó là dễ dàng hơn và an toàn hơn để thêm mới
IConfigurationElement
. Chỉ cần thêm một khai báo mớiIConfigurationElementVisitor
và trình biên dịch sẽ tạo ra lỗi cho tất cả các cài đặt của khách truy cập. Vớiinstanceof
các chuỗi bạn phải nhớ tất cả các vị trí bạn phải mở rộng với thành phần cấu hình mới. Về cơ bảninstanceof
vi phạm nguyên tắc DRY vì nó sao chép logic ở một số nơi. - Mẫu khách truy cập hiệu quả hơn một chuỗi các
instanceof
điều kiện
ví dụ
- Ưu điểm lớn của
instanceof
nó là tính linh hoạt của nó. Ví dụ,instanceof
cho phép tôi xác định các giải pháp đặc biệt cho các tập hợp con khác nhau của cácIConfigurationElement
triển khai cần được xử lý tương tự trong một số trường hợp. Ngược lại, Khách truy cập buộc tôi phải thực hiện một phương thức cho mỗi lớp triển khai mỗi lần.
Có một giải pháp chung cho loại vấn đề này? Tôi có thể điều chỉnh Khách truy cập bằng cách nào đó không, vì vậy tôi có thể cung cấp giải pháp chung cho một số trường hợp?