tworzenie obiektów poprzez statyczne metody

0

W jaki sposób powinno się tworzyć obiekty? Co jest lepsze? Niestety nie mogę znaleźć żadnego poradnika na ten temat
Sposób nr 1:

Complex point = Complex.FromRealNumber(23.d);

czy sposób 2:

Complex point = new Complex(23.0d);
2

Sposób 1 to tzw "Fabryka" i ma ona swoje zastosowania, szczególnie kiedy chciałbyś zwrócić podklasę pewnego typu w zależności od parametrów.
Wyobraź sobie że masz interfejs Workbook która obsługuje plik Excela. Tyle że formatów pliku excela jest cała masa -> binarny xls, xml, xlsx itd. Więc realistycznie w programie masz np. 5 różnych klas dla tego interfejsu, do czytania różnych formatów. Teraz to użytkownik mógłby sobie robić new XLSXExcelWorkbook(file) ale musiałby wiedzieć konkretnie który typ ma tworzyć, a to nie koniecznie jest dla niego oczywiste. Co wiecej takie coś może być potrzebne w wiecej niz 1 miejscu.

Alternatywnie możesz zrobic fabrykę WorkbookFactory która zwróci ci "poprawny typ" sama wykrywając z jakim plikiem ma do czynienia. Co wiecej w takim przypadku kod jest niejako "uniwersalny" bo nigdzie (poza fabryką) nie polegamy na konkretnch implemetancjach, tylko na interfejsie. Możemy sobie w przyszłości rozszerzyć fabrykę o nowe typy, a reszta kodu pozostaje bez zmian!

Oczywiście z drugiej strony, jeśli wiesz dokładnie jaki typ chcesz tworzyc to nie ma sensu kombinować, String to zwykle będzie String, Complex to będzie Complex ;)

Użycie fabryki pozwala ewentualnie na użycie jakiego wewnętrznego cache -> np. Java ma takie dla obiektów Integer, żeby niepotrzebnie ich nie duplikować, bo przecież 1 to 1 i nie trzeba w programie miliona jedynek.

0

Jak @Shalom napisał fabryka ma bardzo dobre zastosowania gdy zwracasz referencję do interfejsu czy klasy abstrakcyjnej. Np. masz DownloadManager i klasę abstrakcyjną Download która ma implementacje HttpDownload i FtpDownload -> na podstawie podanego URL fabryka sprawdza którą wersję obiektu powinna wytworzyć :)

0

OK. Dzięki za odpowiedzi. Z fabryką ma to wszystko sens.

1 użytkowników online, w tym zalogowanych: 0, gości: 1