Czytałem Skuteczne Java przez Joshua Bloch i do tej pory naprawdę zasługuje na swoją reputację. Pierwszy element stanowi przekonujący przypadek dla statycznych metod konstruowania przez ponad konstruktorów. Tak bardzo, że zacząłem kwestionować ważność dobrych starych konstruktorów :).Czy kiedykolwiek wolimy konstruktorów od metod statycznych w fabrykach? Jeśli tak, to kiedy?
zalety/wady z książki są zestawione poniżej:
Zalety:
- Mają imiona!
- Mamy całkowitą kontrolę przykład (Singleton'y, wydajność itd.)
- Mogą zwrócić podtypu/interfejs
- kompilator zapewni wnioskowanie typu
wady:
- Klasy prywatne nie mogą być poddane podklasie
- Nie wyróżniają się w dokumentacji jako konstruktor s zrobić
Pierwszą wadą może być rzeczywiście A Good Thing (jak wspomniano w książce). Druga, myślę, jest tylko niewielką wadą i może być łatwo rozwiązana w nadchodzących wydaniach java (adnotacje dla javadoc itp.).
Wygląda na to, że w końcu metody fabryki mają prawie wszystkie zalety konstruktorów, wiele wiele więcej zalet i brak realnych wad!
Więc moje pytanie jest w zasadzie w trzech częściach:
- Czy to dobra praktyka, aby zawsze używać statycznych metod fabrycznych domyślnie przez konstruktorów?
- Czy korzystanie z konstruktorów jest uzasadnione?
- Dlaczego języki obiektowe nie zapewniają obsługi poziomu języka w fabrykach?
Uwaga: Istnieją dwa podobne pytania: When to use a Constructor and when to use getInstance() method (static factory methods)? i Creation of Objects: Constructors or Static Factory Methods. Jednak odpowiedzi albo podają powyższą listę, albo powtarzają uzasadnienie statycznych metod fabrycznych, o których już wiem.
Ponadto, podobno fabryki mają nawet zalety związane z bezpieczeństwem gwintów w stosunku do konstruktorów zgodnie z [to] (http://madpropellerhead.com/random/20100328-java-final-fields-are-not-as-final-as- możesz pomyśleć). – MadChuckle
Przeczytałem artykuł, do którego się odwołałem, ale doszedłem do przeciwnego wniosku jak autor ... :-) Widzę, co zostało wskazane, ale się nie zgadzam. Być może ma to związek z konkretnymi przypadkami użycia, które zwykle widzimy podczas kodowania. –
@BrianKnoblauch, nie jestem ekspertem w dziedzinie współbieżności, więc przyjmiemy twoje słowo, ponieważ przykłady wydają się nieco spreparowane :) – MadChuckle