/* 
 
Software Architecture Design Patterns in Java 
by Partha Kuchana  
 
Auerbach Publications 
 
*/ 
 
 
 
import java.util.HashMap; 
 
public class CommandTest { 
 
  public static void main(String[] args) { 
 
    //Add an item to the CD category 
    //create Receiver objects 
    Item CD = new Item("A Beautiful Mind"); 
    Category catCD = new Category("CD"); 
    //create the command object 
    CommandInterface command = new AddCommand(CD, catCD); 
    //create the invoker 
    ItemManager manager = new ItemManager(); 
    //configure the invoker 
    //with the command object 
    manager.setCommand(command); 
    manager.process(); 
 
    //Add an item to the CD category 
    CD = new Item("Duet"); 
    catCD = new Category("CD"); 
    command = new AddCommand(CD, catCD); 
    manager.setCommand(command); 
    manager.process(); 
 
    //Add an item to the New Releases category 
    CD = new Item("Duet"); 
    catCD = new Category("New Releases"); 
    command = new AddCommand(CD, catCD); 
    manager.setCommand(command); 
    manager.process(); 
 
    //Delete an item from the New Releases category 
    command = new DeleteCommand(CD, catCD); 
    manager.setCommand(command); 
    manager.process(); 
 
  } 
} 
 
class ItemManager { 
  CommandInterface command; 
 
  public void setCommand(CommandInterface c) { 
    command = c; 
  } 
 
  public void process() { 
    command.execute(); 
  } 
} 
 
class Item { 
 
  private HashMap categories; 
 
  private String desc; 
 
  public Item(String s) { 
    desc = s; 
    categories = new HashMap(); 
  } 
 
  public String getDesc() { 
    return desc; 
  } 
 
  public void add(Category cat) { 
    categories.put(cat.getDesc(), cat); 
  } 
 
  public void delete(Category cat) { 
    categories.remove(cat.getDesc()); 
  } 
 
} 
 
class DeleteCommand implements CommandInterface { 
  Item item; 
 
  Category cat; 
 
  public DeleteCommand(Item i, Category c) { 
    item = i; 
    cat = c; 
  } 
 
  public void execute() { 
    item.delete(cat); 
    cat.delete(item); 
  } 
} 
 
interface CommandInterface { 
  public void execute(); 
} 
 
class Category { 
 
  private HashMap items; 
 
  private String desc; 
 
  public Category(String s) { 
    desc = s; 
    items = new HashMap(); 
  } 
 
  public String getDesc() { 
    return desc; 
  } 
 
  public void add(Item i) { 
    items.put(i.getDesc(), i); 
    System.out.println("Item '" + i.getDesc() + "' has been added to the '" 
        + getDesc() + "' Category "); 
  } 
 
  public void delete(Item i) { 
    items.remove(i.getDesc()); 
    System.out.println("Item '" + i.getDesc() 
        + "' has been deleted from the '" + getDesc() + "' Category "); 
  } 
} 
 
class AddCommand implements CommandInterface { 
  Item item; 
 
  Category cat; 
 
  public AddCommand(Item i, Category c) { 
    item = i; 
    cat = c; 
  } 
 
  public void execute() { 
    item.add(cat); 
    cat.add(item); 
  } 
} 
            
       
  |