android 迭代器模式,Android 架构师之路16 设计模式之迭代器模式

1、迭代器模式概念

1.1 介绍

迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。

源于对容器的访问,比如java中的list,Map,数组等,我们知道对容器对象的访问必然是多种多样的,所以我们把遍历的方法封装在容器中,或者不提供遍历方法。

1.2 定义

提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。

1.3 使用场景

访问一个聚合对象的内容而无需暴露它的内部表示

支持对聚合对象的多种遍历

为遍历不同的聚合结构提供一个统一的接口

2、迭代器模式UML类图

82bb34f1bde6

迭代器模式UML类图

角色如下:

Iterator(迭代器):迭代器定义访问和遍历元素的接口

ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置

Aggregate (聚合):聚合定义创建相应迭代器对象的接口

ConcreteAggregate (具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例

3、迭代器模式实现

Iterator:

/**

*抽象迭代接口

*/

public interface Iterator {

/**

* 是否有下一元素

* @return

*/

boolean hasNext();

T next();

}

ConcreteItertor:

/**

* 具体的迭代角色

*/

public class ConcreteItertor implements Iterator{

public ConcreteItertor(List list) {

this.list = list;

}

private List list = new ArrayList<>();

private int cursor = 0;

@Override

public boolean hasNext() {

return cursor!=list.size();

}

@Override

public T next() {

T obj = null;

if(this.hasNext()){

obj = list.get(cursor++);

}

return obj;

}

}

Aggregate:

/**

* 容器的接口

*/

public interface Aggregate {

void add(T t);

void remove(T t);

Iterator iterator();

}

ConcreteAggregate:

public class ConcreteAggregate implements Aggregate {

private List list = new ArrayList<>();

@Override

public void add(T t) {

list.add(t);

}

@Override

public void remove(T t) {

list.remove(t);

}

@Override

public Iterator iterator() {

return new ConcreteItertor<>(list);

}

}

Client:

public class Client {

public static void main(String[] args){

//实例化容器类对象

Aggregate aggregate = new ConcreteAggregate<>();

aggregate.add("aaaa");

aggregate.add("bbbb");

aggregate.add("cccc");

Iterator iterator = aggregate.iterator();

while (iterator.hasNext()){

System.out.println(iterator.next());

}

}

}

结果输出:

aaaa

bbbb

cccc

4、Android源码中的模式实现

1.除了各种数据结构体,如List,Map等包含的迭代器外

2.Android自身源码中也为我们提供了迭代器遍历数据,最为典型的例子就是数据库查询使用Cursor(当我们使用SQLiteDatabase的query方法查询数据库时返回的),该游标对象实质就是一个具体的迭代器,我们可以使用它来遍历数据库查询所得的结果集

5、模式总结

5.1 优点

它支持以不同的方式遍历一个聚合对象。

迭代器简化了聚合类。

在同一个聚合上可以有多个遍历。

在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

5.2 缺点

由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值