(De) serializacja singletona

0

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ć?

2

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

2

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

1
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 :)

0

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 ;]

1

@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.

2

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.

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