Singletony a kontekst aplikacji w Androidzie?

Przypomnienie tego post wyliczenie kilku problemów z używaniem singletonów po obejrzeniu kilku przykładów aplikacji na Androida wykorzystujących wzorzec singleton, zastanawiam się, czy dobrym pomysłem jest używanie singletonów zamiast pojedynczych instancji udostępnianych przez globalny stan aplikacji (podklasowanie Androida.os.Zastosowanie i uzyskanie go poprzez kontekst.getApplication ()).

Jakie zalety / wady miałyby oba mechanizmy?

Szczerze mówiąc, oczekuję tej samej odpowiedzi w tym post Singleton pattern with Web application, Not a good idea! ale zastosowany do Androida. Mam rację? Czym różni się DalvikVM inaczej?

EDIT: chciałbym mieć opinie na temat kilku aspektów:

  • Synchronizacja
  • Reusability
  • testowanie
Author: Community, 0000-00-00

1 answers

Nie zgadzam się z odpowiedzią Dianne Hackborn. Krok po kroku usuwamy wszystkie singletony z naszego projektu na rzecz lekkich, zadaniowych obiektów, które można łatwo odtworzyć, gdy naprawdę ich potrzebujesz.

Singletony są koszmarem testowania i, jeśli leniwie zainicjowane, wprowadzą "indeterminizm stanu" z subtelnymi efektami ubocznymi (które mogą nagle pojawić się podczas przenoszenia wywołań do getInstance() z jednego zakresu do drugiego). Widoczność została wymieniona jako inny problem, a ponieważ singletony implikują "Globalny" (=random) dostęp do współdzielonego stanu, mogą pojawić się subtelne błędy, gdy nie są prawidłowo zsynchronizowane w aplikacjach współbieżnych.

Uważam to za anty-wzorzec, to zły obiektowy styl, który zasadniczo sprowadza się do utrzymania stanu globalnego.

Aby wrócić do twojego pytania:

Mimo że kontekst aplikacji może być uważany za singleton, jest zarządzany przez framework i ma dobrze zdefiniowany cykl życia ]}, zakres i ścieżka dostępu. Dlatego uważam, że jeśli trzeba zarządzać app-global stan, powinien iść tutaj, nigdzie indziej. Jeśli chodzi o cokolwiek innego, zastanów się, czy naprawdę potrzebujesz obiektu singleton, lub czy możliwe jest również przepisanie klasy singleton, aby zamiast tego utworzyć instancję małych, krótkotrwałych obiektów, które wykonują zadanie pod ręką.
 288
Author: Matthias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 15:24:43