Wzorzec projektowy prototyp - prototype

Autor podstrony: Krzysztof Zajączkowski

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

Opis wzorca projektowego prototyp

Prototyp jest wzorcem projektowym kreacyjnym, w którym tworzy się grupę prototypowych obiektów, na podstawie których klasa fabryka tworzy kopie prototypów i zwraca ich interfejs.

Diagram UML wzorca projektowego prototyp

Przykładowy diagram UML wzorca projektowego prototyp można zobaczyć na poniższej ilustracji. Jak widać interfejs iTankPrototype jest dziedziczony przez dwie klasy:

Prototypy tych klas przechowywane są w statycznej zmiennej tablicowej tankPrototype[2], które pod indeksem:

W tej samej klasie znajduje się statyczna metoda makeTank, która jako parametr przyjmuje iTankPrototype::TankType. Na podstawie tego parametru tworzona jest kopia prototypowego obiektu i zwracany jego interfejs.

Przykład diagramu UML wzorca projektowego typu prototyp
Rys. 1
Przykład diagramu UML wzorca projektowego typu prototyp

Przykładowa implementacja wzorca projektowego prototyp

Oto przykład implementacji tego wzorca w języku C++:

#include <iostream> #include <string> #include <map> class iTankPrototype{ protected: std::string tankType; public: virtual void getTankDescription() = 0; virtual iTankPrototype* copy() = 0; enum TankType{ A1M1_Abrams, T34 }; }; class A1M1_Abrams : public iTankPrototype{ public: inline A1M1_Abrams(){ tankType = "A1M1 Abrams"; std::cout<<tankType<<std::endl; } virtual void getTankDescription(){ std::cout<<"Czolg "<<tankType<<std::endl; } virtual iTankPrototype* copy(){ return new A1M1_Abrams(); } }; class T34 : public iTankPrototype{ public: inline T34(){ tankType = "T34"; std::cout<<tankType<<std::endl; } virtual void getTankDescription(){ std::cout<<"Czolg "<<tankType<<std::endl; } virtual iTankPrototype* copy(){ return new T34(); } }; class Factory{ public: static iTankPrototype* makeTank(iTankPrototype::TankType tankType){ std::cout<<"Tworze czolg "; return tankPrototypes[tankType]->copy(); } private: static iTankPrototype* tankPrototypes[2]; }; iTankPrototype* Factory::tankPrototypes[] = {new A1M1_Abrams(), new T34()}; int main(){ iTankPrototype* a1m1_abrams = Factory::makeTank(iTankPrototype::TankType::A1M1_Abrams); iTankPrototype* t34 = Factory::makeTank(iTankPrototype::TankType::T34); std::cin.get(); return 0; }

Wynik działania powyższego kodu:

A1M1 Abrams
T34
Tworze czolg A1M1 Abrams
Tworze czolg T34
Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns/prototype - strona z opisem wzorca prototype [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