Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porownanie wzorcow
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Witam mam 2 pytania dotyczace 4 wzorcow Singleton,Registry map,Strategy i Simple factory.

Czy mi sie wydaje lub REgistry map nie jest uznawany za przyjety wzorzec nigdzie nie potrafie znalesc o nim info znalazlem 2 arty na bloku @Athlan a kilka osob powiedzialo mi zebym sie nim nie sugerowal nie rozumiem dlaczego.

Wiec mam pytanie czysto praktyczne-teoryczne-i nie wiem co jeszcze tongue.gif

Chce sobie uzyc Globalnego obiektu dla polaczenia z baza by bylo tylko jedno "wymyslilem" takie 2 sposoby:

http://3paste.com/s/392 -> normalny Singleton zawsze zwraca mi taki sam Resource polaczenia.
http://3paste.com/s/391 -> jak to cos nazwal Ayeo Singleton z domieszka Registry map tez zwraca 2 takie same Resource

Wiec wydaja sie dobre obydwa jednak dreczy mnie pytanie bo @Ayeo powiedzial mi zebym stosowal 1 sposob jednak nie wiem dlaczego 2 wydaje mi sie lepszy moge bez problemow tworzyc globalny obiekt kazdej klasy i go uzywac.
Jednak w przypadku 1 sposoby trzeba dziedziczyc zawsze po klasei Singleton w drugim przypadku nie jest to potrzebne stad wydaje mi sie lepsze, jednak chcialbym uslyszec wasze opinie.

Oczywiscie czytalem duzo Art'ow na temat Singleton'a i kilka topicow na tym forum np:
http://forum.php.pl/index.php?showtopic=22...amp;hl=rejestry
http://forum.php.pl/index.php?showtopic=73451&st=0
I inne i jak widac nawet w pierwszym topicu moje rozwiazanie nie jest Singletonem a mieszancem jednak wydaje mi sie lepsze co wy na to??

TEraz drugie pytanie bardziej czysto teoryczne tongue.gif zwiazane ze wzorcem Strategy i Simple Factory.

Czy mi sie zdaje lub te 2 wzorce sluza obydwa do implementowania danej czynnosci na wiele sposob sam nie wiedziac napisalem 2 klasy jedna do logowania 2 do rejestracji ktore korzystaja ze wzorca strategy dla bazy Mysql jak i plikow *.txt jednak nie w tym sek.

Moje zasadnicze pytanie jest co lepiej uzywac bo tak sie sklada ze sam wpadlem na Strategy jednak czesto widze tez stosowanie SImple Factory.

Czekam na ciekawe odpowiedzi.

Mam nadzieje ze nie wypowie sie ktos kto sie zna na tym mniej odemnie poniewaz potrzebuje konstruktywnych odpowiedzi.

Dzieki i poZdro tongue.gif
Crozin
class XXX extends Singleton wtf? Dziedziczenie nie służy czemuś takiemu... poza tym co to za dziwny pomysł by umożliwić tylko jedno połączenie z bazą danych? A co jak w przyszłości okaże się, że trzeba będzie jakieś dane pobrać z innej bazy danych? To raz.

Dwa: jeżeli Twój "DBDriver" ma ograncizyć się do nakładki na zwykłe mysql_*() to możesz go sobie darować. Dlaczego nie skorzystasz z PDO?
Trzy: Jakby lepiej było używać A niż B, to B zostałoby usunięte. A że nie jest to znaczy, że ani A, ani B nie jest lepsze. Za to czasami (w zależności od tego co programista uzna za stosowne) można użyć A lub B.
marcio
Cytat
class XXX extends Singleton wtf? Dziedziczenie nie służy czemuś takiemu... poza tym co to za dziwny pomysł by umożliwić tylko jedno połączenie z bazą danych? A co jak w przyszłości okaże się, że trzeba będzie jakieś dane pobrać z innej bazy danych? To raz.

ROTFL widzialem duzo takich przykladow na php.net jak i w artach.

A jak nie to pokaz jak to powinienem zaimplementowac.

Cytat
Dwa: jeżeli Twój "DBDriver" ma ograncizyć się do nakładki na zwykłe mysql_*() to możesz go sobie darować. Dlaczego nie skorzystasz z PDO?
Trzy: Jakby lepiej było używać A niż B, to B zostałoby usunięte. A że nie jest to znaczy, że ani A, ani B nie jest lepsze. Za to czasami (w zależności od tego co programista uzna za stosowne) można użyć A lub B.

ROTFL ludzie dla was nie mozna dac zadnego przykladu chodzi o samo dzialanie a nie o to czy klasa ma oblusgiwac 1 baze lub 3 chodzi o sam przyklad i tak nigdzie z tego nie bede korzystal to raz.

Dwa ja znam sie tylko na Mysql wiec jak bede pisal cos wiekszego lub w grupie osob ktos inny zajmie sie pisaniem sterownika dla Oracle czy PostrgSQL.

Co do Tego Korzystania z A czy B to nie wiem o co chodzi, chodzi ci o to:
Cytat
Czy mi sie zdaje lub te 2 wzorce sluza obydwa do implementowania danej czynnosci na wiele sposob sam nie wiedziac napisalem 2 klasy jedna do logowania 2 do rejestracji ktore korzystaja ze wzorca strategy dla bazy Mysql jak i plikow *.txt jednak nie w tym sek.

Moje zasadnicze pytanie jest co lepiej uzywac bo tak sie sklada ze sam wpadlem na Strategy jednak czesto widze tez stosowanie SImple Factory.
Crozin
Cytat
ROTFL widzialem duzo takich przykladow na php.net jak i w artach.
No i co z tego?
Cytat
A jak nie to pokaz jak to powinienem zaimplementowac.
Poprzez zwykłe:
  1. <?php
  2. class ABC{
  3.  private static $instance = null;
  4.  
  5.  public static getInstance(){
  6.    if(null === self::$instance){
  7.      self::$instance = new ABC();
  8.    }
  9.  
  10.    return self::$instance;
  11.  }
  12. }
  13. ?>
Ewentualnie możesz dodać implementacje jakiegoś interfaceu określającego, że dana klasa implementuje singleton.
Cytat
ROTFL ludzie dla was nie mozna dac zadnego przykladu
Bo przykład to jeszcze musi być dobry.
Cytat
Dwa ja znam sie tylko na Mysql wiec jak bede pisal cos wiekszego lub w grupie osob ktos inny zajmie sie pisaniem sterownika dla Oracle czy PostrgSQL.
Nie chodzi o to byś odrazu pisał sterowaniki do innych silników. Chodzi o to byś dał taką możliwość w ogóle.
Cytat
Co do Tego Korzystania z A czy B to nie wiem o co chodzi, chodzi ci o to:
Cytat
Moje zasadnicze pytanie jest co lepiej uzywac
marcio
  1. <?php
  2. class Singleton {
  3.  
  4. protected static $instances;
  5.  
  6. protected function __construct() { }
  7.  
  8. public static function getInstance() {
  9.  
  10. if (!isset(self::$instances)) {
  11. self::$instances = new Singleton();
  12. }
  13.  
  14. return self::$instances;
  15.  
  16.   }
  17. }
  18. ?>

Jaka jest roznica pomiedzy moim a twoim kodem??

Cytat
Ewentualnie możesz dodać implementacje jakiegoś interfaceu określającego, że dana klasa implementuje singleton.


moze jasniej??

Cytat
Bo przykład to jeszcze musi być dobry.

A co w nim jest zlego chyba ze go zle zinterpretowales.

Cytat
Nie chodzi o to byś odrazu pisał sterowaniki do innych silników. Chodzi o to byś dał taką możliwość w ogóle.

Wydaje mi sie 2 przyklad ktory podalem daje taka mozliwsco wystarczy podac dana klase jako argument tak samo z pierwszym wystarczy by klasa dziedziczyla po Singletonie.

Koncowki jak zwykle nie rozumiem.

P.S co widzisz z zlego w 1 i 2 przykladzie prawie kazdy dziedziczy po Singletonie wiec jak ty to robisz ze ci nie podoba??
Crozin
Cytat
Jaka jest roznica pomiedzy moim a twoim kodem??
Taka, że ja zaimplementowałem singleton w jakiejś konkretnej klasie, a Ty utworzyłeś całą klasę, po której później dziedziczysz tylko po to by mieć dostęp do singletonu.
Cytat
moze jasniej??
Jeżeli będziesz potrzebować takiej funkcjonalności to możesz każdej klasie implementującej singleton przypisać (zaimplementować) interface singleton:
  1. <?php
  2. interface Singleton{
  3.    public static function getInstance();
  4. }
  5.  
  6. class ABCMyClass implements Singleton{
  7.    public static function getInstance(){
  8.        //...
  9.    }
  10. }
  11. ?>
Daje to później możliwość łatej identyfikacji tego, że dana klasa korzysta z tego wzorca. Możesz, nie musisz jak napisałem - zależy Ci będzie Ci to w ogóle potrzebne.

Cytat
A co w nim jest zlego chyba ze go zle zinterpretowales.
Jest to złego, że napisałeś:
Cytat
Wiec mam pytanie czysto praktyczne-teoryczne-i nie wiem co jeszcze
Następnie ja skrytykowałem przykład, a Ty się oburzyłeś. winksmiley.jpg
marcio
Cytat
Taka, że ja zaimplementowałem singleton w jakiejś konkretnej klasie, a Ty utworzyłeś całą klasę, po której później dziedziczysz tylko po to by mieć dostęp do singletonu.

No tak ale jesli uzyje dziedziczenie to za kazdym razem jak chce uzyc Singletona to nie musze pisac tego samego kodu tylko dziedzicze sobie i tyle.

W sumie lepiej juz by bylo zastosowac interfejsy do tego bo co bedzie jak dana klasa ma dziedziczy po 2 klasach LIPA.

Jednak 2 rozwiazanie -> <a href="http://3paste.com/s/391" target="_blank">http://3paste.com/s/391 zalarwia cala sprawe nie musze ani dziedziczyc ani uzywac interfejson i na dodatek dziala to jak NORMALNY Singleton bo obietk jest globalny.</a>

Cytat
Następnie ja skrytykowałem przykład, a Ty się oburzyłeś

Ja sie nie oburzylem nie ma o co bo wiem ze przyklad jest dobry smile.gif.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.