![]() |
![]() ![]() |
![]() |
-lukasamd- |
![]()
Post
#1
|
Goście ![]() |
Witam,
mam pytanie odnośnie wzorca singleton. Jak na moje potrzeby, będę go chyba używał w większości klas w projekcie. No i teraz pytanie: czy jest sens się powtarzać i w każdej klasie wklepywać odpowiedni kod? No chyba nie bardzo. Jak więc to zrealizować? Myślałem o tym, aby zrobić, ażeby konstruktory każdej klasy zawierały opcjonalny pierwszy albo ostatni parametr, określający, czy ma być używany singleton czy nie. Pytanie: jak to w ogóle zrealizować? Wszystko do klasy abstrakcyjnej (o ile dobrze rozumiem jej założenia - w OOP raczkuję)? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 19 Dołączył: 7.09.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Klasa abstrakcyjna zdefiniuje CI tylko metody ktore klasa dziedzicząca po niej musi zawierać...
Ogólnie powiedz po co chesz stosowac singletona, zalezy od wykorzystania, ale ogólnie nie polecałbym, można zawsze inaczej coś zrobić, ale to neich się wypowiedzą guru... Ale jak juz chcesz miec w każdej klasie to mozesz dodać na dzieńdobry pierwszy parametr okreslajacy czy dac tego singa, i w kazdej klasie w konstruktorze sprawdzanie czy ten pierwszy parametr jest true(wtedy robisz singla) albo false(wtedy robisz nowa kopie) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 300 Pomógł: 32 Dołączył: 31.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Najwyraźniej nie zrozumiałeś wzorca skoro nie wiesz jak go zaimplementować. Singleton praktycznie w każdym języku wygląda tak samo: konstruktor z modyfikatorem private/protected, prywatna statyczna zmienna 'instance' zainicjalizowana nullem, publiczna statyczna metoda getInstance(), która w razie potrzeby tworzy instancje, zapisuje ją do zmiennej i zwraca.
Z singletonem jest tylko jeden malutki problem - to horror w przypadku testowania. Jako, że nie ma żadnego wygodnego frameworka DI dla PHP (APC i podobne zjadają komentarze do pól i klas, w których są metadane :/) to zamiast singletonów proponuje wzorzec Registry. Edit: Co do powtarzania kodu odpowiedzialnego za singleton - osobiście nie widzę w tym problemu, ale z łatwością znajdziesz kilka różnych implementacji bazowego singletona np. http://noteslog.com/post/yet-another-singl...ass-in-php-5-3/ . Ten post edytował ucho 11.03.2010, 10:04:46 |
|
|
-lukasamd- |
![]()
Post
#4
|
Goście ![]() |
No właśnie w sposób opisany przez ucho chcę go wykorzystać, no i w celu minimalizacji obciążenia.
@pablo89pl: Tak, z tym nie ma problemu, ale myślę, że można to zrobić jakoś bez powtarzania się w każdej klasie (jakoś automatyczne realizowanie - tyle tylko, że wszystkie klasy muszę wtedy iść przez nadrzędną, która sprawdza to). |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:35 |