Numirea model prototip
Model prototip (prototip) poate fi utilizat în următoarele cazuri:
model Metoda Factory face, de asemenea, independent de sistem de tipul de obiect generat, dar introduce o ierarhie paralelă a claselor pentru fiecare tip de obiect care urmează să fie creată trebuie să fie prezent fabrica de clasă corespunzătoare, care poate fi de nedorit. model prototip nu are acest dezavantaj.
model Descriere Prototip
Pentru a crea un nou model de obiecte prototip foloseste prototipuri. Prototipul - există deja într-un sistem de obiect care sprijină funcționarea, care este capabil de a crea o copie a sine clonare. Astfel, pentru a crea un obiect dintr-o anumită clasă de a efectua operațiuni destul de clona () a prototipului corespunzător.
model prototip este punerea în aplicare a acestui comportament, după cum urmează: toate clasele, obiectele pe care doriți să le creați trebuie să fie subclase ale unei clase comune de bază abstractă. Această clasă de bază trebuie să declare o clonă metoda de interfață (). De asemenea, aici pot fi declarate metode comune virtuale și de altă natură, de exemplu, inițializarea () în cazul în care, după clonarea inițializarea necesară a obiectului nou creat. Toate clasele derivate trebuie să pună în aplicare metoda clone (). In C ++, pentru a crea copii ale obiectelor folosite de constructorul copy, cu toate acestea, în general, de a crea obiecte folosind operația de copiere nu este necesară.
UML-clasa diagrama prototip patterning
Pentru a genera un anumit tip de obiect în sistem trebuie să fie prototipul acestuia. Prototipul este obiectul de același tip, al cărei unic scop este acela de a crea astfel de obiecte ea. De obicei, pentru comoditatea tuturor prototipurilor de sistem existente sunt organizate în depozit sau registre de prototipuri colecții speciale. O astfel de stocare poate fi în implementarea unui tablou asociativ, fiecare element al cărui este o pereche de „Type ID“ - „prototip“. prototipuri de registru vă permite să adăugați sau să eliminați un prototip, și de a crea un obiect de tip identificator. Este funcționarea adăugării dinamic și eliminarea prototipurilor din magazin sunt sistem mai flexibil, permițându-vă pentru a gestiona procesul de creare a noi obiecte.
Implementare model prototip
Aici este punerea în aplicare a unui prototip de model pe exemplul de construcție armate pentru strategia militară „punice războaie“. O descriere detaliată a jocului pot fi găsite în modelele secțiunea Generarea. Pentru a simplifica codul eșantionului va crea caractere militare pentru o armată abstractă fără a ține cont de particularitățile părților aflate în conflict.
Precum și pentru modelul Metoda Factory prezintă două implementări posibile ale prototipului de model, și anume:
- Într-un designer de generalizat pe baza prototipurilor, atunci când o clasă de bază polimorfă Prototip definit o metodă statică pentru crearea de obiecte. În același timp, ca parametru pentru această metodă trebuie să fie transmisă tip ID obiect pentru a crea.
- Pe baza unei clase fabrică dedicat.
Punerea în aplicare Ptototype model bazat pe proiectant generalizat
În clasele de implementare de mai sus toate unitățile militare produse, cum ar fi arcasi infanterie și cavalerie sunt subclase ale abstracte Warrior clasa de baza. Această clasă definește un constructor generic ca metoda statica createWarrior (Warrior_ID id). Prin trimiterea acestei metode ca un tip parametru de unitate de luptă, războinici pot crea tipurile potrivite de trupe. Pentru acest constructor generalizate utilizează registru prototip, implementat ca un tablou asociativ std :: harta, fiecare element din care este o pereche de „identificator de tip razboinic“ - „prototipul său“.
Adăugarea de prototipuri în registrul automat. Acest lucru se face după cum urmează. În subclase Infanteristul, Archer, Horseman, prototipuri sunt definite ca membri de date statice ale acelorași tipuri. Când creați un prototip va fi numit un constructor cu un parametru de tip dummy, care se va adăuga acest registru prototip prototip folosind addPrototype () metoda de Warrior clasa de baza. Este important ca în acest moment obiectul de registru în sine a fost complet construit, motiv pentru care acesta este conceput ca un Singleton Meyers.
Pentru un model de implementare prototip dat sunt următoarele caracteristici:
- Creați noi războinici pot folosi doar proiectantul generic. Crearea lor imediată este imposibilă, deoarece constructorul corespunzător este declarat cu specificator de acces privat.
- Nu există nici o lipsă de implementare bazată pe designer de model generalizat pentru Metoda Factory. și anume Warrior clasă de bază nu știe nimic despre subclasa sa.
Implementarea model prototip cu o clasă fabrică dedicată
În punerea în aplicare de mai sus pentru a simplifica prototipurilor de registru de cod nu este efectuat. Soldații din toate armele sunt create cu ajutorul unor metode adecvate de clasa fabrică PrototypeFactory, în cazul în care prototipuri sunt definite ca variabile statice.
Rezultatele aplicării Prototip patternuri
Avantaje model prototip
- Pentru a crea noi obiecte pentru clientul nu trebuie să știe clasele lor specifice.
- Flexibilitatea de a gestiona procesul de creare a noi obiecte, permițând adăugarea dinamică și eliminarea prototipurilor în registru.