Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prośba o wytłumaczenie dwóch wzorców projektowych
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Nie mogę znaleźć w miarę sensownego i po polsku (ang w ostateczności) porównania wzorca Abstract Factory i Factory Method

Możecie mi to wytłumaczyć na przykładzie albo jakieś linki po polsku?

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Helios
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

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


Odkopuje bo nie chce zakladac nowego temtu. Chce zrozumiec dokladnie te 2 wzorce i bylbym wdzieczny jakby ktos rzucil okiem na to i zweryfikowal czy dobrze je pojmuje. Na wiki jest tylko Factory Method, ale w moim przekonaniu jest tam blad w kodzie: http://phpedia.pl/wiki.php?title=Factory_Method
poniewaz funkcja getRenderer nie zwraca nic, a powinna zwrocic wybrany obiekt. Opis Abstract Factory wogole nie istnieje, dlatego prosze Was o pomoc. Jak kod bedzie poprawny to i komus jeszcze sie przyda.

Factory Method:
  1. <?php
  2.  
  3. interface Render {
  4. abstract function render();
  5. }
  6.  
  7. class HTMLView implements Render {
  8. public function render(){
  9. print "To jest widok HTMLView.";
  10. }
  11. }
  12.  
  13. class PDFView implements Render {
  14. public function render(){
  15. print "To jest widok PDFView.";
  16. }
  17. }
  18.  
  19. class NewsFactory {
  20.  
  21. static public function getView($view){
  22. switch($view){
  23. case 'HTML':
  24. return new HTMLView;
  25. break;
  26.  
  27. case 'PDF':
  28. return new PDFView;
  29. break;
  30.  
  31. default:
  32. throw new Exception('Brak modulu widoku.');
  33. break;
  34. }
  35. }
  36.  
  37. }
  38.  
  39. try{
  40. $oView = NewsFactory::getView('PDF');
  41. }catch(Exception $exception){
  42. die($exception->getMessage());
  43. }
  44. $oView->render();
  45.  
  46. ?>


Abstract Factory:

  1. <?php
  2.  
  3. abstract class NewLine {
  4. abstract public function getNl();
  5. }
  6.  
  7. abstract class SystemManager {
  8. abstract public function getNlSystem();
  9. }
  10.  
  11. class WinNl extends NewLine {
  12. public function getNl(){
  13. return "r\n";
  14. }
  15. }
  16.  
  17. class UnixNl extends NewLine {
  18. public function getNl(){
  19. return "\n";
  20. }
  21. }
  22.  
  23.  
  24. class WinManager extends SystemManager {
  25. public function getNlSystem(){
  26. return new WinNl;
  27. }
  28. }
  29.  
  30. class UnixManager extends SystemManager {
  31. public function getNlSystem(){
  32. return new UnixNl;
  33. }
  34. }
  35.  
  36. $oSystemManager = new UnixManager;
  37. $oNlSystem = $oSystemManager->getNlSystem();
  38. print 'To jest test Abstract Factory'.$oNlSystem->getNl();
  39.  
  40. ?>


Ten post edytował Helios 16.08.2007, 17:34:44
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: 16.10.2025 - 10:06