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, myObject
thuộc lớp MyClass
(ví dụ: giả sử tôi đang làm việc trong Java). myObject
là một chế phẩm có chứa a Collection
, giả sử, a List
và 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 List
nó, bao gồm để đảm bảo rằng List
nó 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 List
là 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 List
thì 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 insert
phươ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 String
giá trị và không có SomeOtherClass
đối tượng nào để chèn. Giả sử tôi không thể sửa đổi insert
phươ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 insert
phương pháp không? Hay tôi nên tạo một đối tượng mới SomeOtherClass
mỗ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.