Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Singleton a klasa "statyczna"
menic
post
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


Mogłby ktoś wytłumaczyć, jaka jest własciwie róznica pomiędzy wzorcem Singleton a tym, ze w klasie mamy wszystkie metody statyczne? Bo jakoś nie moge dojśc co i kiedy stosowac. Wg mnie to nie ma w tym wiekszej różnicy. A co wy sądzicie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
y3ti
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 19.08.2004
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Załóżmy, że mamy klasę DB służącą do obsługi bazy danych oraz klasę DB_Mysql służącą do obsługi bazy MySQL. W rzeczywistym systemie klasa DB była by pewnie abstrakcyjna, ale załóżmy, że nasza klasa ma jakąś funkcjonalność (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Mamy też funkcję, która wykonuje jakąś operacje na na bazie danych. Do tego potrzebny jest jej obiekt klasy DB. Funkcja nie wie z jakiego silnika będziemy korzystać, więc po prostu prosi o obiekt typu DB.

Wersja statyczna:

  1. <?php
  2. class DB {
  3. public static function hello() {
  4. print 'Funkcja query klasy DB'; 
  5. }
  6. }
  7.  
  8. class DB_Mysql extends DB {
  9. public static function hello() {
  10. print 'Funkcja query klasy DB_Mysql';
  11. }
  12. }
  13.  
  14. //
  15. // Zalozmy, ze mamy funkcje, ktora wykonuje jakies zapytanie 
  16. // do bazy danych. Funkcja nie wie z jakiego silnika bazy danych
  17. // korzystamy, wiec korzystamy z dobrodziejstw polimorfizmu
  18. //
  19. function foo(DB $objDB) {
  20. $objDB->hello();
  21. }
  22.  
  23. //
  24. // Nie mozemy zrobic czegos takiego
  25. //
  26. foo(DB_Mysql);
  27. ?>


php wywali nam błąd, ponieważ funkcja foo() oczekuje instancji obiektu DB.

A teraz Singleton:

  1. <?php
  2. class DB {
  3. private static $instance;
  4.  
  5. private function __construct() {}
  6.  
  7. public static function getInstance() {
  8. if(empty(self::$instance)) 
  9. self::$instance = new DB();
  10.  
  11. return self::$instance;
  12. }
  13.  
  14. public static function hello() {
  15. print 'Funkcja query klasy DB'; 
  16. }
  17. }
  18.  
  19.  
  20. class DB_Mysql extends DB {
  21. private static $instance;
  22.  
  23. private function __construct() {}
  24.  
  25. public static function getInstance() {
  26. if(empty(self::$instance)) 
  27. self::$instance = new DB_Mysql();
  28.  
  29. return self::$instance;
  30. }
  31.  
  32. public static function hello() {
  33. print 'Funkcja query klasy DB_Mysql'; 
  34. }
  35. }
  36.  
  37. //
  38. // Zalozmy, ze mamy funkcje, ktora wykonuje jakies zapytanie 
  39. // do bazy danych. Funkcja nie wie z jakiego silnika bazy danych
  40. // korzystamy, wiec korzystamy z dobrodziejstw polimorfizmu
  41. //
  42. function foo(DB $objDB) {
  43. $objDB->hello();
  44. }
  45.  
  46. $db = DB::getInstance();
  47. foo($db); // wyswietli: Funkcja query klasy DB 
  48.  
  49. $db2 = DB_Mysql::getInstance();
  50. foo($db2); // wyswietli: Funkcja query klasy DB_Mysql
  51. ?>


Tak na szybko, tylko taki przykład przyszedł mi do głowy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie
- menic   Singleton a klasa "statyczna"   23.12.2006, 22:55:17
- - Denver   Różnica jest, i to bardzo wyraźna. Singleton to w...   24.12.2006, 00:08:40
- - hwao   Klasa statyczna posiada statyczne metody, generaln...   24.12.2006, 00:15:31
- - LBO   Dodam do wypowiedzi @hwao, że wzorzec singletona j...   24.12.2006, 00:52:25
- - menic   Z teoretycznego punktu widzenia rozumiem. Gorzej z...   25.12.2006, 14:02:51
- - hwao   Hm patrz [PHP] pobierz, plaintext <?php...   25.12.2006, 14:40:00
- - menic   Rozumiem Ale chodzi mi o róznice w zastosowaniu s...   25.12.2006, 14:53:58
- - Cysiaczek   Odpowiedź jest niezwykle prosta - od potrzeb : ) ...   25.12.2006, 16:00:54
- - cadavre   Jednak gdy np. połączenia z bazą, w klasie która o...   25.12.2006, 17:57:15
- - Cysiaczek   @cadavre - a singletonem niby tak? Połączenie jest...   25.12.2006, 18:04:19
- - cadavre   Tak - jak najbardziej jest jak mówisz. Ale porównu...   25.12.2006, 18:38:32
- - menic   Czyli tak jak sie domyślałem. Ten singleton to tak...   25.12.2006, 20:08:54
- - cadavre   Ja też nie widzę sensu w singletonie. Jeśli zdefin...   25.12.2006, 20:35:45
- - y3ti   Zgadza się, ale Twój obiekt $db jest zmienną ...   25.12.2006, 20:52:44
- - cadavre   O właśnie y3ti zauważyłem błąd w swoim poście. Kla...   25.12.2006, 20:56:44
- - y3ti   Masz rację, ale dzięki singleton możesz stworzyć t...   25.12.2006, 21:16:42
- - cadavre   Cytatphp 5 introduces the final keyword, which pre...   25.12.2006, 23:00:28
- - y3ti   brrr zagalopowałem się z tymi klasami finalnymi ...   25.12.2006, 23:20:34
- - cadavre   Swoją drogą final'e stosuje się raczej w końco...   26.12.2006, 00:25:38
- - Denver   Wydaje mi się, że siłą rzeczy klasa zawierająca sa...   26.12.2006, 10:28:10
- - y3ti   Pokombinowałem troszkę i... 1. Klasa statyczna ni...   26.12.2006, 12:34:23
|- - J4r0d   Cytat(y3ti @ 26.12.2006, 12:34:23 ) P...   26.12.2006, 13:45:06
- - hwao   y3ti tłumaczy wam absurd jaki przedstawiliście, mi...   26.12.2006, 15:00:21
- - menic   Skoro nie widze róznicy to niech ktoś przedstawi r...   26.12.2006, 15:32:18
- - cadavre   I jeśli CytatJest to jeden z najpopularniejszych w...   26.12.2006, 17:50:39
- - y3ti   Załóżmy, że mamy klasę DB służącą do obsługi bazy ...   26.12.2006, 17:53:03
- - menic   Ok to takie pytanie. Do czego sie najbardziej przy...   29.12.2006, 12:00:20
- - y3ti   Np. jako wzorzec fabryki [PHP] pobierz, plaintext...   29.12.2006, 12:23:06
- - hwao   http://webcity.pl/webcity/artykuly.php/t/62   30.12.2006, 12:55:24
- - dr_bonzo   'Klasa statyczna' od Singletona rozni sie ...   30.12.2006, 14:18:17
- - Athlan   Na podstawie wzorca singletorn można stwożyć klasę...   17.01.2007, 07:49:10


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 22:57