Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%)
|
Może mnie ktoś oświecić dlaczego używa się singletonów? np:
skoro to samo można osiągnąć w ten sposób?:
Widze jakie są różnice, jednak nie rozumiem dlaczego singletony są stosowane skoro zapis Foo::bar(); jest wygodniejszy i kod klasy krótszy... Czy za pomocą singletonów można zrobić coś, o czym nie wiem? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
Formalnie rzecz biorąc, singletony nie są potrzebne i da się zrobić to samo na zmiennych "klasowych", czyli tak naprawdę na zmiennych globalnych (jedyna różnica, że zamiast $bar piszemy Foo::$bar). Ale zmienne globalne, jak wiadomo, są brzydkie i bebe, i dlatego w OOP stosuje się singletony.
Zresztą, singletony mogą teoretycznie trochę więcej. Można - choć jest to trudne - zrobić singleton który można inicjować parametrem, używając wyjątków i new (ale to w Javie widziałem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ). Można również - choć to również trudne, z uwagi na pokręcony proces inicjacji obiektu - próbować dziedziczenia. Można wreszcie - i to jest chyba najważniejsze - przekazywać sobie referencje do obiektu singletonowego. Jeżeli mamy singleton Foo implementujący interfejs Bar, to możemy sobie przekazywać referencję do Foo (uzyskaną przez Foo::getInstance() ) i nie zastanawiać się co to jest - implementuje Bar i to wystarcza. Czyli singleton jest odpowiednikiem kodu globalnego w OOP, i kilka rzeczy specyficznych dla OOP potrafi "dodatkowo" zrobić. A poza tym, wielkie klasy z samymi metodami statycznymi są oznaką amatorstwa, a mały singleton tu i ówdzie wygląda profesjonalnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . |
|
|
|
Ozzy PHP5 i Singletony 17.03.2004, 16:15:13
Cudi Sigleton pozwala Ci działać na jednej instancji da... 17.03.2004, 16:22:25
Ozzy tak, ale w php5 nie musze używać zmiennych globaln... 17.03.2004, 18:24:14
Cudi Singletony są zastępstwem dla obiektów globalnych ... 17.03.2004, 18:32:08
Ozzy Ja cię rozumiem, ale w php5 nie ma takiej potrzeby... 17.03.2004, 18:38:44
Simpson CytatJa cię rozumiem, ale w php5 nie ma takiej pot... 17.03.2004, 18:44:15
Ozzy Cytatw tej klasie znajduja sie zmienne ktore sa Ci... 17.03.2004, 18:50:55
Wankster Simpson: Ozzy mówił o PHP5, a tam możesz się odwoł... 17.03.2004, 18:51:45
Simpson a no to chyba ze tak. Nie znam aż tak dokłądnie ph... 17.03.2004, 18:53:10
Cudi Tak czy siak singleton może być przydatny, nie będ... 17.03.2004, 18:59:16
Ozzy CytatTak czy siak singleton może być przydatny
prz... 17.03.2004, 19:05:17
Cudi Potrzebna by była bardzo rozbudowana klasa, a Ty m... 17.03.2004, 19:55:29
Ozzy z tym się zgodzę, bo sam używam takiego rozwiązani... 17.03.2004, 20:28:38
Bora z static nie można przesadzać bo przez nadmierne u... 17.03.2004, 20:55:40
Ozzy Cytatz static nie można przesadzać bo przez nadmie... 17.03.2004, 21:13:37
Cudi Ja preferuję tworzenie wewnątrz klasy metodę która... 17.03.2004, 21:15:42
Bora CytatCytatz static nie można przesadzać bo przez n... 17.03.2004, 21:24:31
Ozzy Bora: Foo::$bar do zmiennej i Foo::bar do stałej
... 17.03.2004, 21:56:36
Cudi Myśle że właśnie sam sobie odpowiedziałeś na swoje... 18.03.2004, 17:38:42
Balin czy moglibyscie podac linki do artykulow omawiajac... 18.03.2004, 19:07:33
Ozzy http://www.phppatterns.com/index.php/artic...ticle... 18.03.2004, 19:20:04
Ozzy CytatA poza tym, wielkie klasy z samymi metodami s... 19.03.2004, 08:02:40 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 17:50 |