Extras din referat
Scopuri :
- încapsulează o cerere sub forma unui obiect;
- permite parametrizarea clienţilor cu cereri diferite;
- permite memorarea cererilor într-o coadă;
- suportă operaţii reversibile (undoable operations).
Motivaţie
Şablonul Command permite obiectelor din seturile de instrumente sa genereze cereri către obiecte de aplicaţie neprecizate, prin transformarea cererii însăşi într-un obiect. Acest obiect poate fi stocat şi transmis la fel ca alte obiecte. Cheia acestui şablon este o clasă abstractă Command, care declară o interfaţă pentru executarea operaţiilor. În cea mai simplă formă, această interfaţă include o operaţie abstractă Execute. Subclasele Concrete ale clasei Command precizează o pereche destinatar–acţiune, stocând destinatarul ca o variabilă de instanţă şi implementând operaţia Execute ca să invoce cererea. Destinatarul are cunoştinţele necesare pentru a îndeplini cererea.
Meniurile pot fi foarte uşor implementate cu ajutorul obiectelor Command. Fiecare opţiune dintr-un meniu este o instanţă a unei clase MenuItem. O clasă Application creează aceste meniuri şi obiectele lor de meniu împreună cu restul interfeţei cu utilizatorul. De asemenea, clasa Application ţine evidenţa obiectelor Document ce au fost deschise de către utilizator.
Aplicaţia configurează fiecare obiect MenuItem cu o instanşă a unei subclase Command concretă. Când utilizatorul selectează un obiect MenuItem, acesta din urmă apelează operaţia Execute pe comanda sa, iar Execute efectuează operaţia cerută. Obiectele MenuItem nu cunosc subclasa clasei Command pe care o utilizează. Subclasele Command stochează destinatarul cererii şi invocă una sau mai multe operaţii pe destinatar.
Operaţia Execute a subclasei OpenCommand este diferită: ea cere utilizatorului un nume pentru document, creează un obiect Document corespunzător, adaugă documentul în aplicaţia destinaţie şi deschide documentul.
Definirea macrourilor = secvenţă de comenzi. Clasa MacroCommand este o subclasă concretă a clasei Command, care nu face decât să execute o serie de comenzi. Clasa MacroCommand nu are destinatar explicit, deoarece comenzile din serie îşi definesc propriul lor destinatar.
Preview document
Conținut arhivă zip
- Command - Sablon de Proiectare Comportamental.doc