import java.util.Iterator; import java.util.Random; public class Test { public static void main(String[] args) { // ATester.test(); Tester.test(); } } interface Generator<T>{ T next(); } class A { } class a extends A{ } class b extends A{ } class c extends A{ } class d extends A{ } /* 思路: Generator这个生成器,你可以给它指定size,当你通过迭代器 调用它的生成方法时,你就只能生成你指定的size个元素。 */ class ATester implements Generator<A>,Iterable<A> { private Class[] types = {a.class,b.class,c.class,d.class}; private int size; private Random rand = new Random(47); public ATester() { } public ATester(int size) { this.size = size; } @Override public A next() { try{ return (A)types[rand.nextInt(types.length)].newInstance(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } return null; } @Override public Iterator<A> iterator() { return new Iterator<A>() { int count = size; @Override public boolean hasNext() { return count>0; } @Override public A next() { count--; return ATester.this.next(); } }; } static void test() { ATester g = new ATester(); for (int i = 0; i < 5; i++) { System.out.println(g.next()); } } } /* 负责生成斐波那契数列的生成器! */ class Fibonacci implements Generator<Integer> { private int pre=0,ppre=0; private int i=0; @Override public Integer next() { int result; i++; if (i <=2 ) { result=1; }else{ result=pre+ppre; } ppre = pre; pre = result; return result; } } //这个方案计算量太多了 class Fibonacci2 implements Generator<Integer> { int count=0; private int fbi(int i) { if (i <= 2) { return 1; } return fbi(i-1)+fbi(i-2); } @Override public Integer next() { return fbi(++count); } } //编写一个适配器 class FibonacciAdaptor implements Iterable<Integer> { private int size; private Fibonacci fibonacci; public FibonacciAdaptor(int size, Fibonacci fibonacci) { this.size = size; this.fibonacci = fibonacci; } @Override public Iterator<Integer> iterator() { return new Iterator<Integer>() { //我的方案,感觉没有书中的优雅 //int i = 0; @Override public boolean hasNext() { //return i<size; return size>0; } @Override public Integer next() { //i++; size--; return fibonacci.next(); } }; } } class Tester{ static void test() { Fibonacci f = new Fibonacci(); int i = 0; while (i < 10) { System.out.print(f.next()+" "); i++; } System.out.println(); Fibonacci2 f2 = new Fibonacci2(); i = 0; while (i < 10) { System.out.print(f2.next()+" "); i++; } } }
Java编程思想:泛型接口
猜你喜欢
转载自www.cnblogs.com/junjie2019/p/10550228.html
今日推荐
周排行