Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy to jeszcze jest Fabryka?, Oceńcie proszę czy wyszedłem już poza koncepcję Fabryki (Factory)
djgrin
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

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


Cześć wszystkim,
krótko mówiąc - miałem kod oparty o wzorzec fabryki i po licznych zmianach ewoluował on do czegoś takiego:
  1. class TheFactory {
  2. // ...
  3.  
  4. public function theFactoryMethod($what) {
  5. switch($what) {
  6. case 'one': return new ClassA();
  7. break;
  8. case 'two': return new ClassB();
  9. break;
  10. case 'three': return new ClassC();
  11. break;
  12.  
  13. // ...
  14. }
  15. }
  16.  
  17. // ...
  18. }
  19.  
  20. class TheClass extends TheFactory {
  21. // ...
  22. }
  23.  
  24. $obj = new TheClass();
  25. $newObj = $obj->theFactoryMethod('one');


Chodzi o to, że metoda produkująca obiekty przestała być statyczna, a ja wywołuję ją z obiektu. Klasy ClassA, B i C implementują oczywiście wspólny interfejs, pominąłem tutaj wiele szczegółów, żeby nie zaciemniać, ale mam nadzieję, że wiecie, o co chodzi...
I moje pytanie: czy to jeszcze opiera się o koncepcję Fabryki, czy już nie? Jak sądzicie?

Być może pytanie jest czysto teoretyczne (bo kod oczywiście działa), ale może pokażecie mi błędy, których ja już nie zauważam (IMG:style_emoticons/default/winksmiley.jpg) ...
Tak czy siak - liczę na opinie i dyskusję.

Pozdro
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-=Peter=-
post
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Jest to nadal metoda fabryczna, jednak jaki masz cel w tym aby ta metoda była nie statyczna? O to chodzi w tym wzorcu aby utworzyć obiekt klasy wyspecjalizowanej wywołując metodę statyczną klasy bazowej, po to aby nie tworzyć obiektu w celu utworzenia obiektu właściwego ;]

Cytat
robiąc to statycznie na pewno działało by to szybciej. Wywołanie statycznej funkcji działa około 2 razy szybciej. Tak mi się o uszy obiło.

A nie obiło ci się o uszy, że nie powinno się rozpowszechniać "faktów"? Przed napisaniem takiej bzdury lepiej uruchom prostego benchmarka (10 linijek kodu) i sprawdź, czy to prawda.
Go to the top of the page
+Quote Post
djgrin
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

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


Cytat(-=Peter=- @ 28.05.2010, 21:20:17 ) *
jaki masz cel w tym aby ta metoda była nie statyczna?


Chodzi o to, że obiekt już i tak istnieje (kontynuując przykład, chodzi o obiekt klasy TheClass). A dodatkowo w metodzie fabryki ustawiane są pewne parametry zwracanego obiektu, które bazują na atrybutach właśnie obiektu TheClass (mówiąc w dużym skrócie). Stąd to niestatyczne wywołanie.
Czy to ma sens (IMG:style_emoticons/default/smile.gif) ?

Bo wolałem zrobić tak, niż np.:
  1. TheClass::theFactoryMethod($obj, 'one');

(czyli gdyby metoda była statyczna).

Ten post edytował djgrin 31.05.2010, 12:12:27
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 02:21