Giả sử tôi đang làm việc trên một hệ thống lớn, hợp lý hiện có. Tôi có một đối tượng, myObjectthuộc lớp MyClass(ví dụ: giả sử tôi đang làm việc trong Java). myObjectlà một chế phẩm có chứa a Collection, giả sử, a Listvà các đối tượng khác mà (tôi nghĩ) không liên quan. Nó chứa các phương thức ủy nhiệm chỉ dùng để gọi các phương thức của Listnó, bao gồm để đảm bảo rằng Listnó không bị lộ (xin lỗi nếu tôi hiểu sai thuật ngữ của mình).
Chúng ta hãy nói rằng đây Listlà một List<String>, nhưng vì một số lý do, phương thức truy cập chính là phương thức mặt nạ cho lớp SomeOtherClass. Nếu tôi muốn chèn một cặp giá trị mới vào Listthì tôi sẽ có một đối tượng SomeOtherClassđược gọi someObject. Tôi đã gọi myObject.insert(someObject)và bên trong insertphương thức sẽ có một số phép thuật sẽ lấy ra Stringđể đưa vào List<String>.
Giả sử bây giờ tôi chỉ có một Stringgiá trị và không có SomeOtherClassđối tượng nào để chèn. Giả sử tôi không thể sửa đổi insertphương thức vì nó sẽ phá vỡ mọi thứ trong hệ thống này. Vậy thì có nên quá tải insertphương pháp không? Hay tôi nên tạo một đối tượng mới SomeOtherClassmỗi lần tôi muốn gọi insert?
Tôi đoán rằng nếu tôi đã làm quá tải nó, nó sẽ trông giống như thế này ...
public void insert(String s) {
...
}
public void insert(SomeOtherObject obj) {
this.insert(obj.magicStringMethod());
}
(Ví dụ này là một câu đố giả định dựa trên một tình huống tương tự (hơi phức tạp hơn) liên quan đến quá tải mà tôi gặp phải ngày hôm qua. Tôi sẽ mở rộng nó nếu có bất cứ điều gì không rõ ràng)
Đây sẽ là một nơi thích hợp để quá tải một phương thức? Nếu không, khi nào tôi nên quá tải một phương thức?
magicStringMethod()trong ví dụ của tôi, trong trường hợp của tôi, có được một Stringđại diện trong SomeOtherObjectđó là một đối tượng miền.