码迷,mamicode.com
首页 > 其他好文 > 详细

适配器方法惯用法

时间:2020-07-04 13:19:44      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:xtend   support   return   语句   end   iter   cti   基础   Stub   

如果现有一个Iterable类,你想要添加一种或多种在foreach语句中使用这个类的方法,应该怎么做?

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

 

import java.util.*;

class ReversibleArrayList<T> extends ArrayList<T>{
    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) {
        // TODO Auto-generated method stub
        ReversibleArrayList<String> ral = new  
                ReversibleArrayList<String>(
                        Arrays.asList("To be or not to be".split(" ")));
        for(String s:ral)
            System.out.print(s+" ");
        System.out.println();
        for(String s:ral.reversed())
            System.out.print(s+" ");
    }

}

 

 

来自 Thinking in Java

 

适配器方法惯用法

标签:xtend   support   return   语句   end   iter   cti   基础   Stub   

原文地址:https://www.cnblogs.com/ConsidineJ/p/13234347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!