2011-01-18 12 views
14

Po ~ 10 miesiącach proceduralnego PHP próbuję teraz objąć głównymi zasadami i zasadami projektowania OOP. To jest hobby i nie mam prawie tyle czasu, ile chciałbym realizować, więc proszę wybaczyć dość niski poziom tego pytania.Fabryczne/abstrakcyjne zamieszanie fabryczne

Moja strona (obecnie w 100% proceduralna) jest sercem biblioteki. Użytkownicy wysyłają do magazynu Biblioteki 2 punkty danych - element type oraz element code.

Library.php używa typu elementu, aby wybrać uwzględnienie, a zawiera pobranie kodu, aby trafić do bazy danych, a następnie zbudować stronę.

Kilka przykładów:

[type] [code] 
game RoTo 
map  32 
unit 216 

Przykładem Link byłyby library.php?type=game&code=RoTo

Wszystko działa dobrze, jak jest, ale jak zacząć z OOP widzę oczywiste, łatwe punkty wejścia i ścieżki spadkowe dla „obiektywizacji” ten system.

Jestem również podekscytowany elastycznością, którą dadzą mi dobrze napisane klasy.

Jednak pomysł na wzór przypomina mi się. Wygląda jak wzór Factory, ale jestem zdezorientowany różnicami między F i AF. Czytałem inne pytania dotyczące SO zadające to pytanie i przeczytałem przykłady na OODesign, ale mam wrażenie, że są napisane w innym języku i to raczej frustrujące.

Być może, gdyby ktoś mógł to wyjaśnić za pomocą moich własnych struktur danych, miałoby to dla mnie więcej sensu?

Przepraszamy za kłopot.

Odpowiedz

32

Różnica między Fabryka i Streszczenie Fabryka jest bardzo prosta. W tym drugim przypadku sama fabryka jest abstrakcyjna (!) I nie można jej bezpośrednio utworzyć, ale musi być podklasowana.

Na przykład fabryczne:

class Document { 
    public function createPage() { 
     return new Page; 
    } 
} 

class LandscapeDocument extends Document { 
    public function createPage() { 
     return new LandscapePage; 
    } 
} 

W Abstract Factory:

abstract class Document { 
    abstract public function createPage(); 
} 

class PortraitDocument extends Document { 
    public function createPage() { 
     return new PortraitPage; 
    } 
} 

class LandscapeDocument extends Document { 
    public function createPage() { 
     return new LandscapePage; 
    } 
} 

W skrócie, wzór Fabryka ma domyślną implementację w samej klasie fabrycznych. The Abstract Factory wymaga, aby wszystkie podklasy wdrożyły własną wersję metod fabrycznych.

To wszystko.

+0

Chciałbym mieć rację opisując mój system biblioteki jako odpowiednie dla projektowania wzorca Abstract Factory , biorąc pod uwagę opis, który napisałem? – Drew

+2

@Andrew: Wierzę, że Fabryka Abstrakcyjna byłaby bardziej odpowiednia dla twojego przypadku użycia, tak. – netcoder

1

Oto kolejny sposób można spojrzeć na to:

Aby usunąć krzaki:
wzór zakład jest kreacyjnych wzór. To jest używany do tworzenia wystąpień do użytku.

Wzorzec Fabryka

  • kreacyjnych wzór gdzie logika tworzenia instancji leży w rękach klasy fabryki.
  • Wzór fabryczny tworzy tylko jeden typ instancji obiektu. W twoim przypadku tworzyłby obiekty typu LibraryObject przy założeniu, że obiekt LibraryObject jest najwyższym obiektem w drzewie hierarchii.

Streszczenie Pattern (Fabryka Fabryk)

  • kreacyjnych wzór gdzie logika tworzenia instancji leży w rękach klas, które implementują fabryki interfejsu/klasy abstrakcyjnej .
  • Abstrakcyjny wzór fabryki może tworzyć obiekty różnych typów, dzięki czemu można używać konkretnych implementacji interfejsu Factory/klasy abstrakcyjnej do tworzenia obiektów typów, które pragniesz. Dlatego nazywany jest Fabryką Fabryk.

Dobrym odniesienia byłby ten link poniżej, proponuję zapoznanie się z wzorca Factory Method, a także:
http://www.oodesign.com/creational-patterns/