Wpis z mikrobloga

#programowanie #java

Jestem trochę skonsternowany wzorcem projektowym 'Prototyp'. Podrzuci ktoś jakąś słuszną implementację tego wzorca która daje wymierne korzyści oraz te korzyści przedstawi?

Implementacje przedstawione w necie są naprawdę różne ale większość z nich to zwykła implementacja interfejsu 'Cloneable' + ewentualnie jakaś prosta klasa-nakładka. Większość tych opisów jako korzyść ze stosowania tego 'wzorca' podaje wydajność przy potrzebie utworzenia większej ilości obiektów na raz. Problem w tym że:

1. kopiowanie a tworzenie obiektów to coś innego
2. StackOverflow podaje że klonowanie wcale nie jest wydajniejsze - wszystko zależy od stopnia zaawansowania metody clone() lub konstruktora. W każdym razie nie jest to regułą.

Jak to w końcu jest? :)
  • 10
  • Odpowiedz
@bartoneczek czasem trzeba klonowac i tyle :P masz np obiekt klasy DateTime i chcesz stworzyc drugi taki sam obiekt to klonujesz go. Bo jak napiszesz zmienna = obiektdatetime to w tym momencie zmienna bedzie wskazywac na obiektdatetime zamiast go sklonowac. Czasem jest to przydatne
  • Odpowiedz
@bartoneczek no mialem akcje ze mam obiekt klasy datetime i chcialem obliczyc ile bedzie wynosic po dodaniu 24h i zachowac jednoczesnie wartosc poczatkowa. Wiec go sklonowalem i dodalem 24h do klona. W momencie jak bedzie Ci potrzebny prototyp to bedziesz wiedzial xd raczej nie jest to zbyt powszechnie uzywane niemniej jednak przydatne i sadze ze szybciej sie klonuje niz tworzy nowy obiekt. Zalezy wszystko w jakis sposob wirtualna maszyna javy rozwiazuje kwestie
  • Odpowiedz
no mialem akcje ze mam obiekt klasy datetime i chcialem obliczyc ile bedzie wynosic po dodaniu 24h i zachowac jednoczesnie wartosc poczatkowa. Wiec go sklonowalem i dodalem 24h do klona.


@sometwo: To trochę przekombinowałeś :p

String value = "2017-04-03T14:15:21";
LocalDateTime dateTime = LocalDateTime.parse(value);
LocalDateTime dateTimeAfter24Hours = dateTime.plusHours(24L);
System.out.println(dateTimeAfter24Hours);

2017-04-04T14:15:21
@bartoneczek Używanie wzorców w Javie, aby przyspieszyć wykonanie kawałka kodu nie ma sensu, o ile nie zajmujesz się HFT - wybór prototyp
  • Odpowiedz
@sometwo:
Benchmark              Mode  Cnt  Score   Error  Units
CloneVsNew.newByClone  avgt    3  6,769 ± 0,315  ns/op
CloneVsNew.newByNew    avgt    3  3,774 ± 0,043  ns/op
Dla pustego obiektu
  • Odpowiedz
Wzorzec projektowy, w tym 'prototyp', to abstrakcja opisująca rozwiązanie pewnego problemu lub zagadnienia. Wzorce opisuje się za pomocą diagramów UML, które reprezentują hierarchie klas i zależności. Na przykład ten diagram nic nie mówi na temat języka czy implementacji - można go zaimplementować w Javie, JS, C++, dowolnym innym obiektowym języku a nawet C.

Klonowanie to specyficzna dla Javy metoda kopiowania obiektów, będąca jednocześnie implementacją wzorca prototyp.

Co do wydajności, GotoFinal pokazał, że
  • Odpowiedz