import com.example.demo.shape.RandomShapeGenerator;
import com.example.demo.shape.Shape;
import java.util.Iterator;
/**
* 练习31:修改polymorphism/shape/RandomShapeGenerator.java,使其称为一个Iterable。
* 你需要添加一个接收元素数量为参数的构造器,这个数量是指在停止之前,你想用迭代器生成的元素额数量。
* 验证这个程序可以工作
*/
public class Exercise31 {
public static void main(String[] args) {
RandomShapeGenerator generator = new RandomShapeGenerator(8);
for (Shape o : generator) {
o.draw();
}
}
}
//: polymorphism/shape/RandomShapeGenerator.java
// A "factory" that randomly creates shapes.
package com.example.demo.shape;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
public class RandomShapeGenerator implements Iterable<Shape>{
private Iterator<Shape> iterator;
public RandomShapeGenerator(int size) {
Shape[] shapes = new Shape[size];
for (int i = 0; i < size; i++) {
shapes[i] = next();
}
this.iterator = new ArrayList<Shape>(java.util.Arrays.asList(shapes)).iterator();
}
private Random rand = new Random(47);
public Shape next() {
switch (rand.nextInt(4)) {
default:
case 1:
return new Circle();
case 2:
return new Square();
case 3:
return new Triangle();
}
}
@Override
public Iterator iterator() {
return iterator;
}
} ///:~