Załóżmy, że pracuję na istniejącym, dość dużym systemie. Mam obiekt myObject
klasy MyClass
(dla przykładu załóżmy, że pracuję w Javie). myObject
to kompozycja zawierająca Collection
, powiedzmy, a List
i inne przedmioty, które (myślę) są nieistotne. Zawiera metody delegowania, które służą tylko do wywołania metod, z których List
się składa, w celu zapewnienia, List
że nie zostały ujawnione (przepraszam, jeśli moja błędna terminologia jest nieprawidłowa).
Powiedzmy, że List
jest 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 SomeOtherClass
nazwie someObject
. Wywołałbym myObject.insert(someObject)
i w insert
metodzie byłaby jakaś magia, która odzyskałaby a String
do włożenia List<String>
.
Załóżmy teraz, że mam tylko String
wartość i nie mam SomeOtherClass
obiektu do wstawienia. Zakładając, że nie mogę zmodyfikować insert
metody, ponieważ zepsułaby wszystko w tym systemie. Czy powinienem przeciążyć insert
metodę? Czy powinienem utworzyć nowy obiekt za SomeOtherClass
każ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 String
reprezentację, SomeOtherObject
która była obiektem domeny.