《Android源码设计模式解析和实战》迭代器模式

提供一种方法顺序访问一个容器对象中的各个元素,但又不暴露等于该对象的内部显示。
代码:list
<pre>

public interface BaseList<T> {
void add(T t);

void remove(T t);

Iterator<T> iterator();

}
public class BaseListImpl<T> implements BaseList<T> {
private List<T> list = new ArrayList<>();

@Override
public void add(T t) {
    list.add(t);
}

@Override
public void remove(T t) {
    list.remove(t);
}

@Override
public Iterator<T> iterator() {
    return new ListIterator<>(list);
}

}
public interface Iterator<T> {
boolean hasNext();

T next();

}
public class ListIterator<T> implements Iterator<T> {
private List<T> list = new ArrayList<>();
private int cursor;

public ListIterator(List<T> list) {
    this.list = list;
}

@Override
public boolean hasNext() {
    return cursor != list.size();
}

@Override
public T next() {
    T obj = null;
    if (hasNext()) {
        return list.get(cursor++);
    }
    return obj;
}

}
</pre>
代码:数组
<pre>
public interface BaseArray<T> {
void add(T t, int i);

void remove(int i);

Iterator<T> iterator();

}
public class BaseArrayImpl implements BaseArray<java.lang.String> {

private String[] array = new String[3];

@Override
public void add(java.lang.String t, int i) {
    array[i] = t;
}

@Override
public void remove(int i) {

}

@Override
public Iterator<String> iterator() {
    return new ArrayIterator(array);
}

}
public class ArrayIterator implements Iterator<String> {
private String[] array;
private int cursor;

public ArrayIterator(String[] array) {
    this.array = array;
}

@Override
public boolean hasNext() {
    return !(cursor > array.length - 1 || array[cursor] == null);
}

@Override
public String next() {
    if (hasNext()) {
        return array[cursor++];
    }
    return "";
}

}
</pre>
使用
<pre>

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    BaseList<String> baseList = new BaseListImpl<>();
    BaseArray<String> baseArray = new BaseArrayImpl();
    baseList.add("一");
    baseList.add("二");
    baseList.add("三");
    baseArray.add("1", 0);
    baseArray.add("2", 1);
    baseArray.add("3", 2);
    Iterator<String> iterator = baseList.iterator();
    Iterator<String> iterator2 = baseArray.iterator();
    while (iterator.hasNext()) {
        Log.i(TAG, "onCreate: " + iterator.next());
    }
    while (iterator2.hasNext()) {
        Log.i(TAG, "onCreate: " + iterator2.next());
    }
}

}
</pre>
log
<pre>
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 一
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 二
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 三
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 1
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 2
03-13 21:21:15.690 3290-3290/com.lerz.iteratordemo I/MainActivity: onCreate: 3
</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,917评论 18 399
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,681评论 1 92
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,444评论 11 349
  • 1 场景问题# 1.1 工资表数据的整合## 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目...
    七寸知架构阅读 7,323评论 0 53
  • 土豆泥_3443阅读 728评论 0 1