《Thinking in Java》笔记--适配器模式应用及增强for循环小记

来源:互联网 发布:股大师软件下载 编辑:程序博客网 时间:2024/06/05 08:46

书上243页写了一个适配器模式的应用,摘抄如下:

“适配器”部分来自于设计模式,因为你必须提供特定接口以满足foreach语句,当你有一个接口并需要另一个接口时,编写适配器就可以解决问题。在这里,我希望在默认的前向迭代器的基础上,添加产生反响迭代器的能力,因此我不能使用覆盖,而是添加了一个能产生Iterable对象的方法,该对象可以用于foreach语句。

public class ReversibleArrayList<T> extends ArrayList<T> {    public ReversibleArrayList(Collection<T> c) {        super(c);    }    public Iterable<T> reversed() {        return new Iterable<T>() {            @Override            public Iterator<T> iterator() {                return new Iterator<T>() {                    int current = size() - 1;                    @Override                    public boolean hasNext() {                        return current > -1;                    }                    @Override                    public T next() {                        return get(current--);                    }                    @Override                    public void remove() {                        throw new UnsupportedOperationException();                    }                };            }        };    }}
public class AdapterMethodIdiom {    public static void main(String[] args) {        ReversibleArrayList<String> ral = new ReversibleArrayList<>(                Arrays.asList("To be or not to be".split(" ")));        for(String s : ral) {          //虚拟机会自动调用默认的iteror方法返回Iterable,所以不用指定            System.out.print(s + " ");        }        System.out.println();               for(String s : ral.reversed()) {   //需要指定使用的Iterable            System.out.print(s + " ");        }    }}

从上述例子也可以看出,增强for循环中是通过获取Iterable对象完成遍历的,遍历Collection时,虚拟机会自动调用iteraor方法使用默认的Iterable,其他情况需要在增强for循环中指定Iterable。
参考http://blog.csdn.net/u011392897/article/details/54562596

原创粉丝点击