Tôi có một số mã mà trông giống như:Tôi làm cách nào để sửa sự ghen tị của tính năng trong trường hợp này?
class Parent {
private Intermediate intermediateContainer;
public Intermediate getIntermediate();
}
class Intermediate {
private Child child;
public Child getChild() {...}
public void intermediateOp();
}
class Child {
public void something();
public void somethingElse();
}
class Client {
private Parent parent;
public void something() {
parent.getIntermediate().getChild().something();
}
public void somethingElse() {
parent.getIntermediate().getChild().somethingElse();
}
public void intermediate() {
parent.getIntermediate().intermediateOp();
}
}
Tôi hiểu đó là một ví dụ về "tính năng ghen tị" mã mùi. Câu hỏi là, cách tốt nhất để sửa chữa nó là gì? Bản năng đầu tiên của tôi là đặt ba phương thức này vào cha mẹ:
parent.something();
parent.somethingElse();
parent.intermediateOp();
... nhưng tôi cảm thấy như mã trùng lặp này và cắt API của lớp cha mẹ (đã khá bận).
Tôi có muốn lưu trữ kết quả getIntermediate() và/hoặc getChild() và giữ tham chiếu của riêng tôi cho các đối tượng này không?
Cảm ơn bạn! Tất cả những câu trả lời này đều hữu ích, vì vậy tôi upvoted chúng – RMorrisey