![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
W paru miejscach forum i nie tylko bylo pisane o wzorcu singleton ale jakos nigdzie nie znalazlem wiekszej informacji o tym. Czy ktos moglby podac jakies linki dotyczace tego tematu?? Albo napisze o co w tym biega
![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 286 Pomógł: 0 Dołączył: 1.11.2003 Skąd: Poland, Płock Ostrzeżenie: (0%) ![]() ![]() |
A ja mam pytanie: czy naprawdę Google trzyma swoje zasoby tylko dla wybranych?
-------------------- ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
szukalem na google wiec nie miej pretensji. nie znalazlem ZADNEGO linka odnoszacego sie do polskich stron traktujacych o tym. Z angielskim u mnie tak sobie
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 0 Dołączył: 7.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witaj
Rada: poprzegladaj przykladowe kody z wykorzystaniem singletona to odrazu zakapujesz o co chodzi, wystarczy chwilka skupienia. A ja tylko powiem ze uzywanie ich w php5 nie jest konieczne... Jesli nie wiesz jakie zmiany zaszly w php5 to proponuje angielski tekst, ale poparty wieloma przykladami, znajdujacy sie gdzies na stronie PHP5 zenda ![]() PS. Na forum bylo juz kilka razy wyjasniane co to jest singleton, wiec mozesz/powinnienes tez tu poszukac. Pozdro Ten post edytował Dravo 15.08.2004, 07:25:53 -------------------- Oooo, cia is on the phone... Ok, I got it. Shit I lost it.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 286 Pomógł: 0 Dołączył: 1.11.2003 Skąd: Poland, Płock Ostrzeżenie: (0%) ![]() ![]() |
Cytat(gkeb @ 2004-08-15 00:31:09) szukalem na google wiec nie miej pretensji. nie znalazlem ZADNEGO linka odnoszacego sie do polskich stron traktujacych o tym. A jednak Google trzyma zasoby tylko dla elit... Cóż... wyniki szukania I artykuł znaleziony w Google... -------------------- ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
eee ten mi umknal
![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Dravo @ 2004-08-15 08:25:13) A ja tylko powiem ze uzywanie ich w php5 nie jest konieczne... Nie jest konieczne, ale chyba wygodniejsze niż przekazywanie uchwytu obiektu do i z metody innego obiektu. -------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem juz istote dzialania
![]() Mam coś takiego:
i wszystko jest ok, ale mam jeszcze pewne wątpliwości. W powyższym przykładzie (który notabene znalazłem na forum ![]() Taki był konstruktor:
Jak to zrobić prawidłowo? Czy dobrze rozumuje że każda klasa musi mieć swoja własną funkcje instance, czy też jest możliwość by funkcja instance byla tylko jedna jak i $instance była tablicą ![]() Przepraszam że tak mieszam ale single ton jest dla mnie czymś nowym a OOP zajmóje też sie od niedawna, ale chce sie tego nauczyć ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat(gkeb @ 2004-08-21 12:00:33) Drobny błąd. Jeśli już to powinno być &$this->instance(); chociaż i to (&) w tym przypadku nie jest potrzebne bo nie przypisujesz wyniku zadnej zmiennej. Z tego co pamiętam w manualu jest napisane, żeby nie używać referencji do klasy w konstruktorze tej klasy. Co do drugiego pytania to można używać tablicy instance tylko w tym wypadku pojawia się problem przekazywania dynamicznej liczby parametrów do konstruktora. Oczywiście da się to obejść, ale trzeba to przemyśleć. -------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Wg. tego co napisalem pare postów wyżej w każdej klasie bym musiał mieć metode "Instance"(Get) by tworzyć singletona. Przy paru klasach to jest jeszcze ok ale im bardziej będzie się rozwijał projekt to może powstać bałagan.
Napisałem coś takiego (działa):
Ale jak zauważył Yarecki jest problem z przekazywaniem dynamicznej ilości parametrów do konstruktora danej klasy. Czy można to rozwiązac jako przekazanie tablicy do metody Get?? Chodzi mi o coś takiego:
Czy to jest ok? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat(gkeb @ 2004-08-22 10:58:50) ... Czy to jest ok? Według mnie, wszystko co działa i spełnia określone wymagania jest ok :-) Ja używam czegoś takiego:
Jak na razie nie bawiłem się w dynamiczne przekazywanie parametrów, bo nie miałem klasy, która potrzebowałaby takowych. -------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(gkeb @ 2004-08-22 10:58:50) ... Czy to jest ok? Właśnie w tym problem, że to raczej nie będzie ok, chyba że we wszystkich klasach pozbędziesz się wielu argumentów na żecz jednego argumentu-tablicy zawierającego inne. Bo zapis:
Powoduje, że pierwszy argument funkcji będzie miał wartość $param. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
matid: to mozna rozwiazac np. tak:
-------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Chyba się niezbyt jasno wyraziłem. Chodzi mi o to, że takie coś utworzy klasę, która nie przyjmie po kolei wszystkich argumentów w $param, tylko przyjmie jeden argument $param.
Więc taka funkcja by musiała mieć taką postać:
A nie tak jak normalne funkcje:
Więc w ten sposób ograniczamy się tylko do tworzenia instancji napisanych przez nas klas, które zamiast przyjmować wielu parametrów przyjmują tylko jedną tablicę z parametrami. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Yarecki @ 2004-08-23 04:24:14) Ja używam czegoś takiego: A to akurat IMHO jest fatalne, bo prowadzi do konfuzji oznaczeń. Po co używać nazwy singleton na coś, co zupełnie singletonem nie jest? Akurat jest innym wzorcem, ale to pozostawiam jako ćwiczenie czytelnikom ![]() |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2004-08-23 19:48:19) Po co używać nazwy singleton na coś, co zupełnie singletonem nie jest? Akurat jest innym wzorcem, ale to pozostawiam jako ćwiczenie czytelnikom ![]() Trochę pogrzebałem i wydaje mi się, że jest to Object Pool. -------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
matid a jaki problem w tym ze do konstruktora przekaże dane w postaci tablicy?? Przecież gdy wiem ile i jakie dane mają byc przekazane to w prosty sposób moge je przekazac jako zwykle zmienne, np:
albo wykorzystując pętle foreach. Sam konstruktor klasy jest metodą inicjującą obiekt do stanu gotowości. |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(gkeb @ 2004-08-23 22:48:51) matid a jaki problem w tym ze do konstruktora przekaże dane w postaci tablicy?? Nie ma problemu jeśli korzystasz tylko z własnych klas, natomiast jeśli będziesz miał klasy pisane przez innych to może być konieczność zamieniania kodu danej klasy tak, aby zamiast kilku parametrów przyjmował tylko jedną tablicę. Ja osobiście szukam rozwiązania tego problemu. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Yarecki @ 2004-08-23 21:33:20) Trochę pogrzebałem i wydaje mi się, że jest to Object Pool. Yup ![]() A z innej beczki, co do parametrów: Gdzieś widziałem kod prostego Proxy w wykonaniu selkirka, i tam konstruktor proxy przyjmował zmienną liczbę parametrów, sprawdzał ich liczbę i we wielkiej instrukcji case wywoływał konstruktor obiektu bazowego z tą liczbą parametrów co trzeba. Minus - to obsługiwało tylko do 3 parametrów, bo dla każdej liczby trzeba oddzielnie pisać warunek. A w ogóle to singleton nie powinien mieć parametrów, i już. Kropka. Jak coś przyjmuje parametry, to nie jest to singleton. Bo jak coś ma parametry, to trzeba to gdzieś bezpośrednio stworzyć, a cała idea singletonu polega na tym, że on sam się tworzy i nie obchodzi nas kiedy to się stanie. |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 6.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat ... A w ogóle to singleton nie powinien mieć parametrów, i już. Kropka. Jak coś przyjmuje parametry, to nie jest to singleton. Bo jak coś ma parametry, to trzeba to gdzieś bezpośrednio stworzyć, a cała idea singletonu polega na tym, że on sam się tworzy i nie obchodzi nas kiedy to się stanie. ... Hmm, czyli po stworzeniu instancji obiektu dopiero przekazywac do niego potrzebne dane? Czy też musi byc na tyle "samowystarczalny" by sam pobral to co potrzebuje? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 09:18 |