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);
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);
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.
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ć :)
OK. Dzięki za odpowiedzi. Z fabryką ma to wszystko sens.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.