Tôi đã sử dụng mẫu ủy quyền để bọc một đối tượng được tạo bởi một nhà máy trong thư viện của bên thứ ba. Gần đây, thư viện đã thêm một phương thức được bảo vệ trong lớp cơ sở và lớp trình bao bọc của tôi không còn hoạt động nữa. Có ai có một giải pháp tốt mà không cần phải suy nghĩ để phản ánh?Java: Mẫu ủy quyền và phương pháp được bảo vệ
Đây là trong thư viện bên thứ 3 và trong gói của họ,
public class Base {
public void foo();
protected void bar(); // Newly added
}
này nằm trong gói của riêng tôi,
public class MyWrapper extends Base {
private Base delegate;
public MyWrapper(Base delegate) {
this.delegate = delegate;
}
public void foo() {
delegate.foo()
}
protected void bar() {
// Don't know what to do
}
}
EDIT: bài ban đầu của tôi là không rõ ràng. Hai lớp này nằm trong các gói khác nhau.
Để trả lời câu hỏi tại sao tôi cần ủy quyền. Đây là trường hợp sử dụng điển hình của mẫu Ủy quyền/Trình bao bọc và tôi không thể hiển thị nó ở đây trong một vài dòng mã. Thư viện trưng ra lớp cơ sở nhưng đối tượng thực sự từ nhà máy của chúng là lớp dẫn xuất của Base. Lớp thực tế thay đổi tùy thuộc vào cấu hình. Vì vậy, tôi không biết đại biểu là gì. Do đó mô hình kế thừa thẳng không hoạt động ở đây.
Vâng, mục đích của phương pháp đó là gì? Bạn có thể bỏ qua nó không? Tôi đoán là không, khi bạn nói "không còn hoạt động nữa" ... bạn có thể gọi super.bar() không? Chỉ cần một shot vào màu xanh ... Bạn có bất cứ điều gì docu về phương pháp mới? – Fildor
bạn đã cố gắng di chuyển lớp trình bao bọc của bạn thành một gói có cùng tên/đường dẫn hơn lớp cơ sở có ?? nó là một hack hơn là một giải pháp nhưng 'bảo vệ' phương pháp nên được truy cập trong cùng một gói –
lớp cơ sở '' foo() 'và' bar() 'phương pháp trông giống như' Base' là một giao diện hoặc một lớp trừu tượng. Bạn có thể vui lòng chỉ định câu hỏi của bạn không? Bạn cần phản chiếu theo cách nào? Vì nó được bảo vệ, bạn có thể không cần phải ghi đè lên nó. –