求解答:java小程序执行过程

package chap14;

import java.util.*;

interface Generator {
T next();
}

class Coffee {
private static long counter = 0;
private final long id = counter++;

public String toString() {
    return getClass().getSimpleName() + " " + id;
}

}

class Latte extends Coffee {
}

class Mocha extends Coffee {
}

class Cappuccino extends Coffee {
}

class Americano extends Coffee {
}

class Breve extends Coffee {
}

public class CoffeeGenerator implements Generator, Iterable {
private Class[] types = { Latte.class, Mocha.class, Cappuccino.class,
Americano.class, Breve.class, };
private static Random rand = new Random(47);

public CoffeeGenerator() {
}

// For iteration:
private int size = 0;

public CoffeeGenerator(int sz) {
    size = sz;
}

public Coffee next() {
    try {
        return (Coffee) types[rand.nextInt(types.length)].newInstance();
        // Report programmer errors at run time:
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

    class CoffeeIterator implements Iterator<Coffee> {
    int count = size;

    public boolean hasNext() {
        System.out.println(count);
        return count > 0;
    }

    public Coffee next() {
        count--;

        return CoffeeGenerator.this.next();
    }

    public void remove() { // Not implemented
        throw new UnsupportedOperationException();
    }
};

public Iterator<Coffee> iterator() {
    return new CoffeeIterator();
    //return new CoffeeGenerator();
}

public static void main(String[] args) {
    CoffeeGenerator gen = new CoffeeGenerator();
    for (int i = 0; i < 5; i++)
        System.out.println(gen.next());
    for (Coffee c : new CoffeeGenerator(5))
    //for (Coffee c : gen.iterator())
        System.out.println(c);
}

}

这个是啥。。。给点注释

这个够乱的。。。
主要是把子类打印的过程吧。
至于模式应该是:策略模式
不知有没有答错,大神指点。。

最后一个for循环不对吧