Załóżmy, że pracuję na istniejącym, dość dużym systemie. Mam obiekt myObjectklasy MyClass(dla przykładu załóżmy, że pracuję w Javie). myObjectto kompozycja zawierająca Collection, powiedzmy, a Listi inne przedmioty, które (myślę) są nieistotne. Zawiera metody delegowania, które służą tylko do wywołania metod, z których Listsię składa, w celu zapewnienia, Listże nie zostały ujawnione (przepraszam, jeśli moja błędna terminologia jest nieprawidłowa).
Powiedzmy, że Listjest to, List<String>ale z jakiegoś powodu główną metodą dostępu jest metoda maskowania klasy SomeOtherClass. Gdybym chciał wstawić nową parę wartości do siebie List, miałbym obiekt o SomeOtherClassnazwie someObject. Wywołałbym myObject.insert(someObject)i w insertmetodzie byłaby jakaś magia, która odzyskałaby a Stringdo włożenia List<String>.
Załóżmy teraz, że mam tylko Stringwartość i nie mam SomeOtherClassobiektu do wstawienia. Zakładając, że nie mogę zmodyfikować insertmetody, ponieważ zepsułaby wszystko w tym systemie. Czy powinienem przeciążyć insertmetodę? Czy powinienem utworzyć nowy obiekt za SomeOtherClasskażdym razem, gdy chcę zadzwonić insert?
Wydaje mi się, że gdybym go przeciążył, wyglądałoby to tak ...
public void insert(String s) {
...
}
public void insert(SomeOtherObject obj) {
this.insert(obj.magicStringMethod());
}
(Ten przykład jest wymyśloną łamigłówką opartą na podobnej (nieco bardziej złożonej) sytuacji dotyczącej przeciążenia, z którą się wczoraj spotkałem. Rozwinę ją, jeśli będzie coś niejasnego)
Czy byłoby to odpowiednie miejsce do przeciążenia metody? Jeśli nie, kiedy powinienem przeciążyć metodę?
magicStringMethod()w moim przykładzie uzyskałbym w moim przypadku Stringreprezentację, SomeOtherObjectktóra była obiektem domeny.