Extras din seminar
3.1.COMMAND
Înglobeaza cererea pentru o actiune specifica în interiorul unui obiect cu o interfata publica; clientul are astfel posibilitatea de a efectua cereri fara sa fie obligat sa stie exact ce actiuni vor fi executate ca raspuns la cererea sa, permitând astfel modificarea actiunilor când este necesar- fara a modifica si codul client;
Fiecare obiect îsi primeste propriile comenzi în mod direct, prin intermediul unui obiect de tip Command, acesta din urma are întotdeauna o metoda Execute() ce este apelata la aparitia unei cereri, si care este definita de fiecare obiect apelat în parte;
Este utila când se doreste separarea unei interfete grafice de actiunile initiate de catre interfata (exemplul 2), la trecerea într-o coada de asteptare a acelor actiuni ce necesita resurse ocupate momentan (ex1), sau la operatii de tip Undo.
Diagrama.
Exemple.
1.(B.Eckel)
//: command:CommandPattern.java
package command;
import java.util.*;
import junit.framework.*;
interface Command {
void execute();
}
class Hello implements Command {
public void execute() {
System.out.print("Hello ");
}
}
class World implements Command {
public void execute() {
System.out.print("World! ");
}
}
class IAm implements Command {
public void execute() {
System.out.print("I'm the command pattern!");
}
}
// An object that holds commands:
class Macro {
private List commands = new ArrayList();
public void add(Command c) { commands.add(c); }
public void run() {
Iterator it = commands.iterator();
while(it.hasNext())
((Command)it.next()).execute();
}
}
public class CommandPattern extends TestCase {
Macro macro = new Macro();
public void test() {
macro.add(new Hello());
macro.add(new World());
macro.add(new IAm());
macro.run();
}
public static void main(String args[]) {
junit.textui.TestRunner.run(CommandPattern.class);
}
} ///:~
Preview document
Conținut arhivă zip
- ISP Seminar 3.DOC