package coffee;
/**
* Created by albert.bai on 2014/10/14.
*/
public class Coffee {
private static long counter =0;
private final long id =counter++;
public String toString(){
return getClass().getSimpleName()+" "+id;
}
}
2 创建若干子类
package coffee;
/**
* Created by albert.bai on 2014/10/14.
*/
public class Americano extends Coffee {
}
package coffee;
/**
* Created by albert.bai on 2014/10/14.
*/
public class Breve extends Coffee {
}
……等等
3 创建CoffeeGenerator
package coffee;
import net.mindview.util.Generator;
import java.util.Iterator;
import java.util.Random;
/**
* Created by albert.bai on 2014/10/14.
*/
public class CoffeeGenerator implements Generator<Coffee>, Iterable<Coffee> {
private Class[] types = {Latte.class, Cappuccino.class, Americano.class, Breve.class};
private static Random rand = new Random(47);
public CoffeeGenerator() {
}
private int size = 0;
public CoffeeGenerator(int sz) {
size = sz;
}
@Override
public Coffee next() {
try {
return (Coffee) types[rand.nextInt(types.length)].newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
class CoffeeIterator implements Iterator<Coffee> {
int count = size;
@Override
public boolean hasNext() {
return count > 0;
}
@Override
public Coffee next() {
count--;
return CoffeeGenerator.this.next();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
;
public Iterator<Coffee> iterator() {
return new CoffeeIterator();
}
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)) {
System.out.println(c);
}
}
}