设计模式——迭代器模式详解

0. 前言

 

写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~

 

1. 迭代器模式模式介绍

迭代器模式定义:

又叫做游标(Cursor)模式,提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。

 

迭代器模式的使用场景:

JDK 1.2开始支持迭代器,每一个迭代器提供next()以及hasNext()方法。集合Collection只要实现了Iterable接口,我们都可以使用Iterator来遍历里面的元素。迭代器模式用于遍历一个容器对象时。

 

迭代器模式包括的角色:

 

1迭代器接口Iterator:该接口用于定义迭代功能的方法,比如提供hasNext()next()方法。

2迭代器实现类Concrete Iterator:迭代器接口Iterator的实现类

3容器接口Aggregate:定义基本的增删功能以及类似Iterator iterator()的方法。

4容器实现类Concrete Aggregate:容器接口的实现类。

 

2. 实例介绍

按照上述的角色类,实现一个简单的迭代器模式。

//迭代器接口
public interface Interator<T>{  
boolean hasNext();
T next();  
}
//具体实现类
public class ConcreteInterator<T> implements Interator<T>{  
private List<T> list = new ArrayList<T>();
int count = 0;
public ConcreteInterator( List<T> list){
    this.list = list;
}
    @override  
    public boolean hasNext (){  
        return count!=list.size();
}  
    @override  
    public T next(){  
        return list.get(count++);
    }  
}  

//容器抽象类
public interface Aggregate<T>{  
void add(T obj);
void remove(T obj);
Interator<T> iterator();  
}
//具体容器实现类
public class Concrete Aggregate<T> implements Aggregate<T>{  
private List<T> list = new ArrayList<T>();
    @override  
    public T add(T obj){  
        list.add(obj);
    }  
    @override  
    public T remove(T obj){  
        list.remove(obj);
    }  
    @override  
    public Interator<T> iterator(){  
        return new ConcreteInterator<T>(list);
    }  
}  

//使用时
Aggregate<String> aggregate = new ConcreteAggregate<>();
aggreagte.add(“SEU”);
aggreagte.add(“Calvin”);
Inteator<String> i = aggregate.iterator();
if(i.hasNext()){
    System.out.println(i.next());
}

3. 迭代器模式优缺点和总结

迭代器模式的优点:

1)支持以不同的方式去遍历一个容器对象。

2弱化了遍历算法和容器类中间的关系,因此可以支持多个遍历同时进行。

 

迭代器模式的缺点:

类的个数成对增加,这在一定程度上增加了系统的复杂性。

 

最后需要注意的是,各种高级编程语言都会有自己的内置容器以及迭代器模式的内部实现。

因此开发者对迭代器模式只需要了解即可,一般不需要自己实现、应用。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值