Wzorzec projektowy metoda wytwórcza - factory method

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3897 razy

Opis wzorca projektowego metoda wytwórcza

Metoda wytwórcza należy do kreacyjnych wzorców projektowych. Jest ona w gruncie rzeczy uproszczeniem wzorca projektowego budownczy. Istnieje tutaj jeden wspólny interfejs przypisany dla danej grupy klas opisujących konkretne obiekty. Istotną rolę odgrywa klasa fabryki obiektów, która zawiera statyczną metodę, wewnątrz której względem podanego parametru tworzony jest nowy obiekt i zwracany jego interfejs.

Przykładowy diagram UML wzorca metoda wytwórcza

Jak widać na poniższym diagramie UML klasa TankFactory zawiera metodę statyczną buildTank, która jako jedyny argument pobiera wartość typu Tank::TankType wbudowanego w interfejs iTank. W zależności od ustawienia tegoż parametru tworzony jest obiekt klasy: A1M1_Abrams_tank lub T34_tank a następnie zwracany interfejs iTank*.

Przykładowy diagram UML dla wzorca projektowego metoda wytwórcza
Rys. 1
Przykładowy diagram UML dla wzorca projektowego metoda wytwórcza

Przykładowa implementacja wzorca metoda wytwórcza

Przykład implementacji z powyższego diagramu UML napisanej w języki C++:

#include <iostream> #include <string> class Tank{ protected: std::string tankType; public: inline Tank(std::string tankType) : tankType(tankType){} inline virtual void getTankType() const = 0; enum TankType{ A1M1_Abrams, T34 }; }; class A1M1_Abrams_tank : public Tank{ public: inline A1M1_Abrams_tank() : Tank("A1M1 Abrams"){} inline virtual void getTankType() const { std::cout<<tankType<<std::endl; } }; class T34_tank : public Tank{ public: inline T34_tank() : Tank("T34"){}; inline virtual void getTankType() const { std::cout<<tankType<<std::endl; } }; class TankFactory{ public: static Tank* createTank(const Tank::TankType tt){ switch(tt){ case Tank::TankType::A1M1_Abrams: std::cout<<"Buduje czolg A1M1 Abrams!"<<std::endl; return new A1M1_Abrams_tank(); case Tank::TankType::T34: std::cout<<"Buduje czolg T34!"<<std::endl; return new T34_tank(); } } }; int main(){ Tank* T34 = TankFactory::createTank(Tank::TankType::T34); std::cout<<"Wybudowano czolg: "; T34->getTankType(); Tank* A1M1_Abrams = TankFactory::createTank(Tank::TankType::A1M1_Abrams); std::cout<<"Wybudowano czolg: "; A1M1_Abrams->getTankType(); std::cin.get(); return 0; }

Wynik działania powyższego kodu:

Buduje czolg T34!
Wybudowano czolg: T34
Buduje czolg A1M1 Abrams!
Wybudowano czolg: A1M1 Abrams
Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns/factory_method - strona z opisem wzorca design patterns [En]
  2. pl.wikipedia.org - opis wzorca na stronie Wikipedii
Propozycje książek
tytuł: C++. Projektowanie oprogramowania. Zasady i wzorce projektowe autor: Klaus Iglberger

Tytuł:

C++. Projektowanie oprogramowania. Zasady i wzorce projektowe

Autor:

Klaus Iglberger

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III autor: Carlos Santana Roldán

Tytuł:

React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III

Autor:

Carlos Santana Roldán

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku autor: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Tytuł:

Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku

Autor:

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

tytuł: Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III autor: Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

Tytuł:

Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III

Autor:

Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

tytuł: Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych autor: Bilgin Ibryam,  Roland Huß

Tytuł:

Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych

Autor:

Bilgin Ibryam, Roland Huß

tytuł: Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II autor: Alan Shalloway, James R. Trott

Tytuł:

Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II

Autor:

Alan Shalloway, James R. Trott

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona