Wzorzec projektowy metody fabrycznej w Pythonie

wprowadzenie

w tym artykule przyjrzymy się wzorcowi projektowemu metody Fabrycznej zaimplementowanemu w Pythonie.

wzorce projektowe definiują sprawdzone rozwiązania różnych powtarzających się problemów w tworzeniu oprogramowania. Nie reprezentują one rzeczywistego kodu, ale raczej sposoby, w jakie możemy zorganizować nasz kod, aby uzyskać optymalne wyniki.

w świecie ograniczonych zasobów wzorce projektowe pomagają nam osiągnąć jak najwięcej wyników przy najmniejszej ilości zużytych zasobów. Ważne jest również, aby pamiętać, że wzorce projektowe nie mają zastosowania do wszystkich sytuacji i ważne jest, aby ocenić problem pod ręką, aby wybrać najlepsze podejście do tego konkretnego scenariusza.

wzorce projektowe są podzielone na kilka szerokich kategorii, choć głównie na wzorce kreacyjne, wzorce strukturalne i wzorce behawioralne.

wzór metody fabrycznej jest Kreacyjnym wzorem projektowym.

wzorzec projektowy metody Fabrycznej

definicja

metoda fabryczna jest stosowana w programowaniu obiektowym jako sposób dostarczania fabrycznych interfejsów do tworzenia obiektów. Interfejsy te definiują strukturę ogólną, ale nie inicjują obiektów. Inicjalizacja jest pozostawiona bardziej specyficznym podklasom.

Klasa nadrzędna/interfejs zawiera wszystkie standardowe i ogólne zachowania, które mogą być współdzielone między podklasami różnych typów. Podklasa jest z kolei odpowiedzialna za definiowanie i tworzenie instancji obiektu w oparciu o klasę nadrzędną.

motywacja

główną motywacją wzorca projektowego Factory Method jest wzmocnienie luźnego sprzężenia w kodzie poprzez stworzenie klasy abstrakcyjnej, która będzie używana do tworzenia różnych typów obiektów, które mają pewne wspólne atrybuty i funkcjonalność.

powoduje to większą elastyczność i ponowne użycie kodu, ponieważ wspólna funkcjonalność nie zostanie przepisana po odziedziczeniu z tej samej klasy. Ten wzorzec projektowy jest również znany jako wirtualny Konstruktor.

wzorzec projektowania metody fabrycznej jest powszechnie używany w bibliotekach, umożliwiając klientom wybór podklasy lub typu obiektu do utworzenia za pomocą klasy abstrakcyjnej.

metoda Fabryczna otrzyma informacje o wymaganym obiekcie, utworzy jego instancję i zwróci obiekt określonego typu. Daje to naszej aplikacji lub bibliotece pojedynczy punkt interakcji z innymi programami lub fragmentami kodu, tym samym zamykając naszą funkcjonalność tworzenia obiektów.

implementacja metody Fabrycznej

nasz program będzie biblioteką służącą do obsługi obiektów kształtu w zakresie tworzenia i innych operacji, takich jak dodawanie koloru i obliczanie obszaru kształtu.

użytkownicy powinni mieć możliwość korzystania z naszej biblioteki do tworzenia nowych obiektów. Możemy zacząć od tworzenia pojedynczych kształtów i korzystania z nich tak, jak jest, ale oznaczałoby to, że wiele wspólnej logiki będzie musiało zostać przepisane dla każdego dostępnego kształtu.

pierwszym krokiem do rozwiązania tego powtórzenia byłoby utworzenie nadrzędnej klasy kształtu, która ma metody takie jak calculate_area() i calculate_perimeter() oraz właściwości takie jak wymiary.

określone obiekty kształtu będą dziedziczyć z naszej klasy bazowej. Aby utworzyć kształt, będziemy musieli określić, jakiego rodzaju kształt jest wymagany i utworzyć dla niego podklasę.

zaczniemy od stworzenia klasy abstrakcyjnej reprezentującej ogólny kształt:

jest to klasa bazowa dla wszystkich naszych kształtów. Stwórzmy kilka konkretnych, bardziej specyficznych kształtów:

do tej pory stworzyliśmy klasę abstrakcyjną i rozszerzyliśmy ją, aby pasowała do różnych kształtów, które będą dostępne w naszej bibliotece. Aby utworzyć różne obiekty kształtu, klienci będą musieli znać nazwy i szczegóły naszych kształtów i osobno wykonać tworzenie.

tu wchodzi w grę metoda Fabryczna.

wzorzec projektowy metody Fabrycznej pomoże nam w abstrakcji dostępnych kształtów od klienta, tzn. klient nie musi znać wszystkich dostępnych kształtów, a raczej tworzyć tylko to, czego potrzebuje w czasie działania. Pozwoli to również na centralizację i zamknięcie tworzenia obiektu.

osiągnijmy to, tworząc ShapeFactory, która będzie używana do tworzenia określonych klas kształtów na podstawie danych wejściowych klienta:

to jest nasz interfejs do tworzenia. Nie dzwonimy do konstruktorów betonu, dzwonimy do fabryki i prosimy o stworzenie kształtu.

nasz ShapeFactory działa poprzez otrzymywanie informacji o kształcie, takich jak nazwa i wymagane wymiary. Nasza metoda fabryczna create_shape() zostanie następnie wykorzystana do tworzenia i zwracania gotowych obiektów o pożądanych kształtach.

klient nie musi nic wiedzieć o tworzeniu lub specyfice obiektu. Korzystając z obiektu factory, mogą tworzyć obiekty z minimalną wiedzą o tym, jak działają:

uruchomienie tego kodu spowoduje:

lub, możemy zbudować inny kształt:

co warto zauważyć, poza tym, że Klient nie musi dużo wiedzieć o procesie tworzenia – kiedy chcemy utworzyć instancję obiektu, nie nazywamy konstruktora klasy. Prosimy fabrykę, aby zrobiła to za nas na podstawie informacji, które przekazujemy do funkcji create_shape().

plusy i minusy

plusy

jedną z głównych zalet stosowania wzorca projektowania metody fabrycznej jest to, że nasz kod staje się luźno sprzężony, ponieważ większość składników naszego kodu nie jest świadoma innych składników tego samego kodu.

powoduje to, że kod jest łatwy do zrozumienia, przetestowania i dodania większej funkcjonalności do określonych komponentów bez wpływu na cały program lub jego uszkodzenia.

wzorzec projektowania metody Fabrycznej pomaga również utrzymać zasadę pojedynczej odpowiedzialności, w której klasy i Obiekty obsługujące określoną funkcjonalność skutkują lepszym kodem.

wady

tworzenie większej liczby klas ostatecznie prowadzi do mniejszej czytelności. Jeśli w połączeniu z abstrakcyjną fabryką (fabryka fabryk), kod wkrótce stanie się gadatliwy, ale możliwy do utrzymania.

podsumowanie

podsumowując, wzór metody Fabrycznej pozwala na tworzenie obiektów bez podawania dokładnej klasy wymaganej do utworzenia danego obiektu. Pozwala nam to oddzielić nasz kod i zwiększa jego możliwość ponownego użycia.

ważne jest, aby pamiętać, że podobnie jak każdy inny wzór projektowy, nadaje się tylko do konkretnych sytuacji, a nie do każdego scenariusza rozwoju. Ocena sytuacji pod ręką jest kluczowa przed podjęciem decyzji o wdrożeniu wzorca projektowego metody Fabrycznej, aby czerpać korzyści z wzorca.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.