Tehnici de proiectare software - Tipografia
Tehnici de proiectare software - Tipografia
Tehnici de proiectare software - Tipografia
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Multe din aplicaŃiile curente permit anularea fiecărei comenzi până la un<br />
anumit punct, cum ar fi ultima salvare efectuată. Daca se doreşte introducerea acestui<br />
lucru în aplicaŃia curentă, este nevoie <strong>de</strong> crearea unui istoric - o listă cu toate acŃiunile<br />
pe care utilizatorul le-a efectuat, cu toate datele utilizate şi cu starea prece<strong>de</strong>ntă. După<br />
vre-o trei sau patru acŃiuni, istoricul <strong>de</strong>vine mai mare <strong>de</strong>cât întreaga aplicaŃie şi asta<br />
din cauza redundanŃei datelor.<br />
Are mai mult sens combinarea acŃiunii utilizatorul într-un singur obiect -<br />
obiectul Command. Acesta conŃine datele necesare pentru o acŃiune specifică, precum<br />
şi comportamentul lor. Astfel, aplicaŃia doar invocă metoda <strong>de</strong> execuŃie a obiectului<br />
Command care execută comanda. AplicaŃia nu mai trebuie să cunoască toate opŃiunile<br />
disponibile şi poate fi uşor modificată încât să includă mai multe acŃiuni ale<br />
utilizatorului.<br />
• Utilizare<br />
Şablonul Command se foloseşte pentru:<br />
- anularea comenzilor, logare şi / sau tranzacŃii<br />
- executarea comenzilor în momente diferite<br />
• Descriere<br />
O aplicaŃie care nu foloseşte şablonul Command trebuie să conŃină meto<strong>de</strong><br />
care să se ocupe <strong>de</strong> fiecare eveniment care poate apărea. Prin urmare handler-ul<br />
trebuie să aibă toate informaŃiile pentru a putea executa acŃiunea. Introducerea unor<br />
noi acŃiuni necesită adăugarea <strong>de</strong> noi meto<strong>de</strong> clasei handler-ului.<br />
Şablonul Command încapsulează atât datele cât şi funcŃionalitatea necesară<br />
pentru a executa o acŃiune sau cerinŃă specifică. El pune la dispoziŃie o separare între<br />
cum trebuie executată o acŃiune şi momentul când trebuie executată. O aplicaŃie care<br />
foloseşte şablonul Command creează o sursă, un receptor şi o comandă. Comanda<br />
primeşte referinŃa către receptor şi sursa primeşte o referinŃă către comandă.<br />
Obiectul comandă este trimis către cel care 1-a invocat, care implementează<br />
interfaŃa Command. în forma ei cea mai simplă, interfaŃa are o metodă <strong>de</strong> executare.<br />
Clasele care o implementează reŃin receptorul ca o variabilă <strong>de</strong> instanŃă. Când metoda<br />
<strong>de</strong> executare e apelată, Command apelează metoda doAction din clasa Receiver.<br />
Command poate apela mai multe meto<strong>de</strong> ale clasei Receiver.<br />
• Implementare<br />
Diagrama <strong>de</strong> clase a şablonului Command este următoarea:<br />
Invoker<br />
interface Command<br />
+void execulef)<br />
ConcreteCommand<br />
-Receiver target<br />
----<br />
►<br />
Receiver<br />
+void execute()<br />
+void action()<br />
25