Java设计模式之--迭代器模式(Iterator)

概念:

迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。

贴段查询数据库的代码:

询数据库均会把查询的结果包装在一个Cursor的子类对象中返回。Cursor就像是位于结果聚集之上的一个游标,可以对结果集进行向前、向后或随 机的访问。这就是一种迭代模式

Cursor lanCursor = mDbHelper.findList(false, "language_id",
                new String[] { "LanguageID" }, "CountryID = '" + CountryID
                        + "'", null, null, null, null, null);
        if (lanCursor != null && lanCursor.moveToNext()) {
            String LanguageIDT = lanCursor.getString(lanCursor
                    .getColumnIndexOrThrow("LanguageID"));


            strReturn = LanguageIDT;
            // strReturn = lanid.get(LanguageIDT) == null ? "1" : lanid
            // .get(LanguageIDT);


        }
        if (lanCursor != null) {
            lanCursor.close();
        }


来看一下迭代器模式类图:


下面看自己怎么去实现在集合迭代:

先创建一个迭代接口:

public interface Iterator {

    public Object previous();

    public Object next();

    public boolean hasNext();

    public Object first();

}

创建一个集合接口:里面需要定义一个方法,返回类型为上面的迭代接口

public interface Collection {
    public Iterator iterator();

    public int size();

    public Object get(int pos);

    public Collection add(Object o);
}

再写这两个接口的实现类:
CityList 内部持有一个List 存放城市名

public class CityList implements Collection {

    private List<String> website = new ArrayList<String>();

    public CityList(List<String> website) {
        this.website = website;
    }

    @Override
    public Collection add(Object o) {
        if (null != website) {
            website.add((String) o);
        }
        return this;
    }

    @Override
    public Iterator iterator() {
        return new IteratorImplement(this);
    }

    @Override
    public int size() {
        return null == website ? 0 : website.size();
    }

    @Override
    public Object get(int pos) {
        return website.get(pos);
    }
}

迭代接口的实现类:内部持有一个Collection对象
public class IteratorImplement implements Iterator {

    private int pos = -1;
    private Collection collection;

    public IteratorImplement(Collection collection) {
        this.collection = collection;
    }

    @Override
    public Object previous() {
        pos--;
        return (null == collection || pos < 0 || pos >= collection.size()) ? null : collection.get(pos);
    }

    @Override
    public Object next() {
        pos++;
        return (null == collection || pos < 0 || pos >= collection.size()) ? null : collection.get(pos);
    }

    @Override
    public boolean hasNext() {
        return (null == collection || pos < -1 || pos >= collection.size() - 1) ? false : true;
    }

    @Override
    public Object first() {
        pos = 0;
        return (null == collection || pos < 0 || pos >= collection.size()) ? null : collection.get(pos);
    }
}

测试类:
public class WorkClass {
    public void test() {
        List<String> list= new ArrayList<String>();
        list.add("beijing");
        list.add("shanghai");
        Collection collection = new CityList(list).add("guangzhou").add("shenzhen");
        Iterator iterator  = collection.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}

输出结果:
01-29 06:39:47.740 6038-6038/com.example.qinghua_liu.myapplication I/System.out: beijing
01-29 06:39:47.740 6038-6038/com.example.qinghua_liu.myapplication I/System.out: shanghai
01-29 06:39:47.740 6038-6038/com.example.qinghua_liu.myapplication I/System.out: guangzhou
01-29 06:39:47.740 6038-6038/com.example.qinghua_liu.myapplication I/System.out: shenzhen
01-29 06:39:47.740 6038-6038/com.example.qinghua_liu.myapplication E/MainActivity2: qinghua item3 clicked


实现了对CityList聚集内部的遍历访问,其实Android 源码各个功能类也都是这些基本的东西,一些基本设计模式思想,
或者某几个模式的思想都有体现,再进行一些优化。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值