1)来自java思想
已经存在一个生成Fibonacci数列的一个对象了,但是不可能总有这个对象的控制权,所以要增加这个对象的功能,则选择是适配器
工厂方法
package test;
public interface Generator<T> {
public T next();
}
package test;
public class Fibonacci implements Generator<Integer>{
private int count = 0;
private int fib(int n){
if(n<2) return 1;
return fib(n-2)+fib(n-1);
}
@Override
public Integer next() {
return fib(count++);
}
//每一次next都会产生下一个数
}
如果优化Fibonacci类,让其实现Iterable接口,会更加好,但是不可能总有Fibonacci的控制权,则用适配器模式
package test;
import java.util.Iterator;
public class IterableFibonacci extends Fibonacci implements Iterable<Integer>{
//控制循环次数,终止条件
private int n;
public IterableFibonacci(int n){this.n = n;}
@Override
public Iterator<Integer> iterator() {
return new Iterator<Integer>(){
@Override
public boolean hasNext() {
return n>0;
}
@Override
public Integer next() {
n--;
return IterableFibonacci.this.next();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args) {
IterableFibonacci ci = new IterableFibonacci(10);
for(Integer i : ci){
System.out.println(i);
}
}
}
其实是想实现foreach循环功能,也就是要实现Iterable接口,但是原来的类已经修改不了了,所以需要适配,这里选择继承的方式获取到Fibonacci的方法