Il Command pattern è basato sui dati e rientra nella categoria Comportamentali.
Il suo principio è molto semplice: una richiesta viene racchiusa sotto un oggetto come comando e passata all’oggetto invocatore. L’oggetto Invoker cerca la classe appropriata in grado di gestire la richiesta e passa il comando all’oggetto corrispondente che lo esegue.
DIAGRAMMA UML
IMPLEMENTAZIONE COMMAND
Creiamo un’interfaccia Ordine che funge da comando, dopo di chè creiamo una classe magazzino che funge da richiesta. Inoltre creiamo le classi concrete Compra e Vendi che implementano l’interfaccia Ordine, la quale eseguirà la vera elaborazione dei comandi.
Infine, creiamo la classe command che funge da invoker, la classe può prendere ed effettuare ordini. La classe identifica l’oggetto che eseguirà il comando in funzione del tipo.
Step 1: Creiamo l’interfaccia Ordine
public interface Ordine {
void esegui();
}
Step 2: Creiamo la classe Magazzino, che funge da richiesta
public class Magazzino {
private String nome = "Prodotto_1";
private int quantità = 25;
public void compra(){
System.out.println("[MAGAZZINO]: [ NOME: "+nome+", QUANTITA': " + quantità +" ] COMPRATO");
}
public void vendi(){
System.out.println("[MAGAZZINO]: [ NOME: "+nome+", QUANTITA': " + quantità +" ] VENDUTO");
}
}
Step 3: Creiamo le classi concrete che estendono l’interfaccia
Compra.java
public class Compra implements Ordine {
private Magazzino magazzino;
public Compra(Magazzino magazzino){
this.magazzino = magazzino;
}
public void esegui() {
magazzino.compra();
}
}
Vendi.java
public class Vendi implements Ordine {
private Magazzino magazzino;
public Vendi(Magazzino magazzino){
this.magazzino = magazzino;
}
public void esegui() {
magazzino.vendi();
}
}
Step 4: Creiamo la classe Command
import java.util.ArrayList;
import java.util.List;
public class Command {
private List ordineList = new ArrayList();
public void prendiOrdine(Ordine order){
System.out.println("[COMMAND]: prendiOrdine()::start");
ordineList.add(order);
System.out.println("[COMMAND]: prendiOrdine()::Ordine aggiunto alla lista!");
System.out.println("[COMMAND]: prendiOrdine()::end");
}
public void piazzaOrdine(){
System.out.println("[COMMAND]: piazzaOrdine()::start");
for (Ordine ordine : ordineList) {
ordine.esegui();
}
System.out.println("[COMMAND]: piazzaOrdine()::Ordini eseguiti!");
ordineList.clear();
System.out.println("[COMMAND]: piazzaOrdine()::end");
}
}
Step 5: Creiamo il main
public class Main {
public static void main(String[] args) {
Magazzino magazzino = new Magazzino();
Compra compraOrdine = new Compra(magazzino);
Vendi vendiOrdine = new Vendi(magazzino);
Command broker = new Command();
broker.prendiOrdine(compraOrdine);
broker.prendiOrdine(vendiOrdine);
broker.piazzaOrdine();
}
}
Step 6: Output
[COMMAND]: prendiOrdine()::start
[COMMAND]: prendiOrdine()::Ordine aggiunto alla lista!
[COMMAND]: prendiOrdine()::end
[COMMAND]: prendiOrdine()::start
[COMMAND]: prendiOrdine()::Ordine aggiunto alla lista!
[COMMAND]: prendiOrdine()::end
[COMMAND]: piazzaOrdine()::start
[MAGAZZINO]: [ NOME: Prodotto_1, QUANTITA': 25 ] COMPRATO
[MAGAZZINO]: [ NOME: Prodotto_1, QUANTITA': 25 ] VENDUTO
[COMMAND]: piazzaOrdine()::Ordini eseguiti!
[COMMAND]: piazzaOrdine()::end
0 Comments