Design Pattern Java Tutorial

public class MainClass {
  public static void main(String args[]) {
    Computer computer = new Computer();
    computer = new Disk(computer);
    computer = new Monitor(computer);
    computer = new CD(computer);
    System.out.println("You're getting a " + computer.description() + ".");
  }
}
class Disk extends ComponentDecorator {
  Computer computer;
  public Disk(Computer c) {
    computer = c;
  }
  public String description() {
    return computer.description() + " and a disk";
  }
}
class CD extends ComponentDecorator {
  Computer computer;
  public CD(Computer c) {
    computer = c;
  }
  public String description() {
    return computer.description() + " and a CD";
  }
}
class Computer {
  public Computer() {
  }
  public String description() {
    return "computer";
  }
}
abstract class ComponentDecorator extends Computer {
  public abstract String description();
}
class Monitor extends ComponentDecorator {
  Computer computer;
  public Monitor(Computer c) {
    computer = c;
  }
  public String description() {
    return computer.description() + " and a monitor";
  }
}