29.04.2013 Views

Tehnici de proiectare software - Tipografia

Tehnici de proiectare software - Tipografia

Tehnici de proiectare software - Tipografia

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!