持有对象(容器)——适配器(反向迭代器使用)

来源:互联网 发布:720全景源码 编辑:程序博客网 时间:2024/05/19 09:02
应用:

当你有一个接口并需要另一个接口时,编写适配器可以解决。

我希望在默认的前向迭代器的基础上,添加产生反向迭代器的能力,因此不能使用覆盖,而是添加了一个能够产生Iterable对象的方法,该对象可以用于foreach语句。)

代码编写:

a:类继承class ReversibleArrayList<T> extends ArrayList<T>,再写返回类型为iterator<Object>()方法,之后有提示

class ReversibleArrayList<T> extends ArrayList<T>{  // 反向迭代器private static final long serialVersionUID = 1L;public ReversibleArrayList(Collection<T> c){ super(c); }public Iterable<T> reversed(){return new Iterable<T>() {public Iterator<T> iterator() {return new Iterator<T>() {int current = size() - 1;public boolean hasNext() {return current > -1;}public T next() {return get(current--);}public void remove() {throw new UnsupportedOperationException();}};}};}}
测试:

public class AdapterMethodIdiom {public static void main(String[] args) {ReversibleArrayList<String> ral = new ReversibleArrayList<String>(Arrays.asList("To be or not to be".split(" ")));for (String string : ral)   //放在foreach语句中,将得到(默认的)向前迭代器System.out.print(string+" ");System.out.println();for (String string : ral.reversed()) {System.out.print(string+" ");} }}
打印:



b:编写类继承class IterableClass implements Iterable<Object>会直接添加返回类型为Iterator<Object>的方法,return Iterator<Object>(){hasNext(),next(),remove()}

public class IterableClass implements Iterable<Object>{protected String[] words = ("And that is how " + "we know the Earth to be banana-shaped.").split(" ");public Iterator<Object> iterator() {return new Iterator<Object>() {private int index = 0;public boolean hasNext() {return index < words.length;}public String next() {return words[index++];}public void remove() {throw new UnsupportedOperationException();}};}}
应用:

public class MultiIterableClass extends IterableClass{public Iterable<Object> reversed(){return new Iterable<Object>() {public Iterator<Object> iterator() {return new Iterator<Object>() {int current = words.length-1;public void remove() {throw new UnsupportedOperationException();}public String next() {return words[current--];}public boolean hasNext() { return current > -1;}};}};}public Iterable<String> randomized(){return new Iterable<String>() {public Iterator<String> iterator() {List<String> shuffled = new ArrayList<String>(Arrays.asList(words));Collections.shuffle(shuffled);//打乱数组return shuffled.iterator();}};}public static void main(String[] args) {MultiIterableClass mic = new MultiIterableClass();for (Object string : mic.reversed()) System.out.print(string.toString()+" ");System.out.println();for (String string : mic.randomized())System.out.print(string+" ");System.out.println();for (Object object : mic) {System.out.print(object.toString()+" ");}}}
控制台打印




0 0
原创粉丝点击