Design Pattern Java

/*
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);
  }
}