Cześć,
czytam właśnie książkę Java EFEKTYWNE PROGRAMOWANIE i jest wątek o singletonie, następnie została poruszona kwestia serializacji i deserializacji obiektu typu singleton. Przypadek rozumiem, tylko zastanwiam się po co? Czy spotkał się ktoś z takim przypadkiem? Kiedy to może się przydać?
Singleton + Serializacja? Tytuł książki powinien brzmieć Java DEfektywne Programowanie**.
Można sobie wyobrazić że nasz Singleton jest cache'm danych z innej usługi np. kursy walut NBP. Gdy robimy restart zapisujemy sobie zawartość cache na dysku tak żeby po restarcie mieć "gorący" cache z danymi a nie walić znowu 100 razy po te same dane.
Inny przypadek to serializacja obiektów typu object
w językach Scala i Kotlin które są singletonami na poziomie języka. Zahacza to też trochę o problematykę serializacji wartości typu Enum z Javy.
**) OK OK przesadziłem
Dzięki serializacji/deserializacji na JVM możesz mieć 2 instancje singletona. Implementacja oparta na enumie zapobiega tej anomalii. W praktyce nigdy nie widziałem takiej implementacji - w większości przypadków nikt nie używał serializacji z JDK, a nawet jeśli, to ciężko mi sobie wyobrazić tworzenie singletonów, które przeważnie są serwisami, z danych przesyłanych z zewnątrz O_o
Charles_Ray napisał(a):
a nawet jeśli, to ciężko mi sobie wyobrazić tworzenie singletonów, które przeważnie są serwisami,
Powiem to samo wyraźniej / szerzej.
Nie ma sensu (de)serializowanie czegokolwiek udostępniającego "jakąś usługę/czynność". Kiedyś lubiłem podawać przykład socketa, handlera pliku itd...
0xmarcin napisał(a):
Singleton + Serializacja? Tytuł książki powinien brzmieć Java DEfektywne Programowanie**.
...
**) OK OK przesadziłem
Niewiele :)
Singleton + Serializacja? Tytuł książki powinien brzmieć Java DEfektywne Programowanie**.
Tytuł jest poprawny. W książce jest wytłumaczone to że jak jak masz serializowany obiekt to klasyczny singleton nie wystarcza na ochronę przed wieloma instacjami. I będziesz jak @jarekr000000 ktory lubi singletony i ma po kilka instancji każdego ;]
@dziki_kret nie zrozumiałeś intencji autora. To był przykład że nie tak łatwo zrobić singleton który faktycznie może występować tylko jeden raz i trzeba robić cuda na kiju z enumami zeby się udało.
W tamtej poradzie chodził o to że autor rozumie że czasem potrzebny jest singleton i że jeśli tak jest to jedynym słusznym rozwiązaniem wg niego jest enum. Składnia może nieintuicyjna ale można napisać z głowy.
Poza tym zgadzam się z przedmowcami że najlepsze singletony to te które można tworzyć wielokrotnie.
W Delphi był taki trochę koślawy Printer - jak Ci instancja nie odpowiadała to odpalałes funkcje globalna...SetPrinter.