Wzorce projektowe, coto, poco, dlaczego |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Wzorce projektowe, coto, poco, dlaczego |
17.04.2007, 10:42:25
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Przez te święta człowiek rachube stracił i zapomniał o PRO.
No to może coś o wzorcach projektowych? Co to jest, na co to komu, jakie korzyści przyniesie stosowanie, jakie mamy wzorce (opis). -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
11.01.2009, 01:06:04
Post
#2
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 12 Dołączył: 9.10.2008 Skąd: Tricity.Rumia() Ostrzeżenie: (0%) |
Witam chciałbym się przyłączyć do dyskusji.
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją". Gdzieś kiedyś czytałem że singleton to poprostu obejście braku klas abstrakcyjnych w php 4. Jeżeli kody takie jak ten zaprezentowany przez orglee #28 mają dowodzić potrzeby zastosowania Singletonu to nie mamy o czym rozmawiać. Przypisanie instancji do zmiennej statycznej i odwoływanie się do tychże singletonów przez klasę główną nie ma żadnego sensu(w sensie singletonowym ;] ). Zaryzykuję stwierdzenie, że aplikacja ta nie wykorzystuje wogóle wzorca singleton aczkolwiek może go implementować.(wniosek ... ) A do eliminacji pomyłek to polecam coś takiego:
|
|
|
12.01.2009, 01:20:52
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Warszawa Ostrzeżenie: (0%) |
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją". No to sie mylisz brachu i powiem Ci dlaczego. Klasa jest tylko pewna struktura, opisem zachowywania sie obiektow i zadna (nawet najmniejsza ;p) jej instancja nie jest alokowana w pamieci. Gdyby mozna bylo dodac dyrektywe static przed nazwa klasy, to wtedy prawdopodobnie mozna byloby tak powiedziec. Idac dalej, pola statyczne w klasie sa inicjalizowane w pamieci, dlatego mozesz na nich operowac. A klasa wtedy jest tylko takim interfejsem dostepu do tych danych. Poza tym, wg definicji, tworzac obiekt, tworzysz instancje, w zadnym innym wypadku. W pamieci jest tylko przechowywana jej struktura, bys ty sam ta instancje mogl powolac. A skoro instancje, programista moze powolac tylko tworzac nowy obiekt, singleton znaczy nie inaczej niz, pozwolenie na stworzenie tylko jednego obiektu. Poza tym dzieki temu ze jest to obiekt, mozesz go np serializowac i zapisac w cachu, klasy (tej niby statycznej) nie zserializujesz. Nic z nia nie zrobisz. mozesz tylko (powtorze sie) przez nia uzyskac dostep do blokow pamieci (pola statyczne). Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow? Pozdrawiam Ten post edytował qba_rox 12.01.2009, 01:30:47 -------------------- Kodzimy!!!
|
|
|
23.04.2009, 03:04:47
Post
#4
|
|
Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) |
Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow? Pozwolę sobie nie zgodzić się i wyprowadzić Cie z błędu przy okazji Załóżmy, że klasa Session jest klasą która opisuję sesję. Tworzona jest tylko raz, na początku działania frameworku, następnie przekazywana do Request, następnie, Controller i potem do Response. Jak widać masz jedną klasę, która ma swoje określone workflow, wiadomo w jakiej kolejności co i jak ma do niej dostęp - w taki sposób, że możesz narysować diagram "podań" ten klasy. Czy taki model nie jest dużo czytelniejszy niż singleton? I teraz rozważmy możliwość tworzenia nowych instancji Sessji, gdzie wiemy, że sesja jest tylko jedna. Jak to bywa z obiekatmi kontekstowymi, są one przekazywane w parametrach metod do kolejnych klas, i nawet jak utworzysz nowy obiekt klasy Session, to on i tak będzie pusty a spopulowany danymi obiekt będzie tylko ten który był w parametrze - więc jaki problem? imho, żaden. Za używanie Singletonów powinni bić po mordzie i tyle |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 01:00 |