b'\n_START_ARTICLE_\nRefaktoryzacja\n_START_SECTION_\nUsuwanie nadmiarowych konstruktor\xc3\xb3w\n_START_PARAGRAPH_\nKonieczno\xc5\x9b\xc4\x87 zastosowania tego typu metody refaktoryzacji nast\xc4\x99puje najcz\xc4\x99\xc5\x9bciej w przypadku, gdy programista chc\xc4\x85c szybko zastosowa\xc4\x87 now\xc4\x85 funkcjonalno\xc5\x9b\xc4\x87, rozszerza klas\xc4\x99 o kolejne konstruktory z nowymi parametrami. Podajmy przyk\xc5\x82ad oparty na systemie obliczaj\xc4\x85cym warto\xc5\x9b\xc4\x87 po\xc5\xbcyczki:_NEWLINE_Pozyczka(wartosc);_NEWLINE_Pozyczka(wartosc, oprocentowanie);_NEWLINE_Pozyczka(wartosc, oprocentowanie, czasSplaty);_NEWLINE_Pozyczka(wartosc, oprocentowanie, czasSplaty, ryzyko);_NEWLINE_Pozyczka(warto\xc5\x9b\xc4\x87, oprocentowanie, czasSplaty, ryzyko, status);_NEWLINE_Pocz\xc4\x85tkowo w kodzie programu istnia\xc5\x82 jeden konstruktor o nazwie \xe2\x80\x9ePozyczka\xe2\x80\x9d z jednym parametrem (wartosc). W miar\xc4\x99 dodawania nowych funkcjonalno\xc5\x9bci pojawia\xc5\x82a si\xc4\x99 potrzeba tworzenia konstruktor\xc3\xb3w \xe2\x80\x9ePozyczka\xe2\x80\x9d o wi\xc4\x99kszej liczbie parametr\xc3\xb3w. W ten spos\xc3\xb3b powsta\xc5\x82o pi\xc4\x99\xc4\x87 metod o tej samej nazwie, lecz r\xc3\xb3\xc5\xbcnym dzia\xc5\x82aniu._NEWLINE_Taki kod zazwyczaj wymaga refaktoryzacji, gdy\xc5\xbc nazwa metody powinna jednoznacznie wskazywa\xc4\x87, za jak\xc4\x85 funkcjonalno\xc5\x9b\xc4\x87 systemu metoda odpowiada. Przy dalszym rozwoju kodu tej klasy mog\xc4\x85 pojawi\xc4\x87 si\xc4\x99 problemy z implementacj\xc4\x85 wynikaj\xc4\x85ce z niezrozumienia faktycznej roli konstruktora. _NEWLINE_Po refaktoryzacji kod mo\xc5\xbce mie\xc4\x87 posta\xc4\x87:_NEWLINE_Pozyczka(wartosc, oprocentowanie,  czasSplaty, ryzyko, status);_NEWLINE_ustalWartosc(wartosc);_NEWLINE_stworzPozyczke(wartosc, oprocentowanie);_NEWLINE_dajPozyczke(wartosc, oprocentowanie, czasSplaty);_NEWLINE_sprawdzPozyczke(wartosc, oprocentowanie, czasSplaty, ryzyko);\n_START_SECTION_\nTworzenie \xc5\x82a\xc5\x84cucha konstruktor\xc3\xb3w\n_START_PARAGRAPH_\nStosowanie \xc5\x82a\xc5\x84cucha konstruktor\xc3\xb3w jako metody refaktoryzacyjnej jest wskazane w typowych przypadkach nadmiarowo\xc5\x9bci kodu w klasach o wielu konstruktorach, kt\xc3\xb3re nadpisuj\xc4\x85 po sobie kod. Sztandarowym przyk\xc5\x82adem takiej sytuacji jest przypisywanie warto\xc5\x9b\xc4\x87 parametr\xc3\xb3w do p\xc3\xb3l w ka\xc5\xbcdym konstruktorze klasy:_NEWLINE_Pozyczka(wartosc) { _NEWLINE_this.wartosc = wartosc; _NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie) {_NEWLINE_this.wartosc = wartosc;_NEWLINE_this.oprocentowanie = oprocentowanie;_NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie, czasSplaty) {_NEWLINE_this.wartosc = wartosc;_NEWLINE_this.oprocentowanie = oprocentowanie;_NEWLINE_this.czasSplaty = czasSplaty;_NEWLINE_}_NEWLINE_Mo\xc5\xbcna zauwa\xc5\xbcy\xc4\x87, \xc5\xbce zamiast ka\xc5\xbcdorazowego przypisywania warto\xc5\x9bci mo\xc5\xbcna utworzy\xc4\x87 tzw. \xc5\x82a\xc5\x84cuch, kt\xc3\xb3ry pozwoli na uproszczenie kodu:_NEWLINE_Pozyczka(wartosc) {_NEWLINE_this(wartosc, null);_NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie) {_NEWLINE_this(wartosc, oprocentowanie, null);_NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie, czasSplaty) {_NEWLINE_this.wartosc = wartosc;_NEWLINE_this.oprocentowanie = oprocentowanie;_NEWLINE_this.czasSplaty = czasSplaty;_NEWLINE_}_NEWLINE_W przypadku, gdy \xc5\x82a\xc5\x84cuch konstruktor\xc3\xb3w jest d\xc5\x82ugi kolejne wywo\xc5\x82ania mog\xc4\x85 okaza\xc4\x87 si\xc4\x99 ma\xc5\x82o wydajne. Alternatyw\xc4\x85 w takim przypadku jest zastosowanie konstruktora uniwersalnego (kt\xc3\xb3ry przyjmuje wszystkie mo\xc5\xbcliwe parametry):_NEWLINE_Pozyczka(wartosc) {_NEWLINE_this(wartosc, null, null);_NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie) {_NEWLINE_this(wartosc, oprocentowanie, null);_NEWLINE_}_NEWLINE__NEWLINE_Pozyczka(wartosc, oprocentowanie, czasSplaty) {_NEWLINE_this.wartosc = wartosc;_NEWLINE_this.oprocentowanie = oprocentowanie;_NEWLINE_this.czasSplaty = czasSplaty;_NEWLINE_}_NEWLINE_Zastosowanie tych metod pozwala na ustalenie jednego miejsca przypisania warto\xc5\x9bci parametr\xc3\xb3w do p\xc3\xb3l. W takim przypadku konieczne jest wychwytywanie wszystkich mo\xc5\xbcliwych zerowych warto\xc5\x9bci parametr\xc3\xb3w (tzw. null pointer\xc3\xb3w), albo zdefiniowanie i u\xc5\xbcycie warto\xc5\x9bci domy\xc5\x9blnych.'