作者:千绝
邮箱:wl625363199@gmail.com
公众号:千绝
标题:设计模式之迭代器模式(转载请标明出处)
Hello,各位看官老爷们,千绝我回来更新了,最近发生了一件人生大事,导致了我鸽了一个星期,就是千绝看了一周的房,终于靠自己的努力让我的家人帮我买房了(hahaha)相信在座的各位看官老爷们也可以。
好了不开玩笑了,因为千绝年底要结婚了,所以趁现在就去看了一下婚房,我感觉我买房效率还是挺快的,估计遇到我的销售都开心的飞了,我周四晚上联系的房屋销售,周六上午看的房,下午就把首付交了。我媳妇都说节奏太快了,我也感觉节奏挺快的,就这样当了韭菜被房子绑住了,以后再也不能想吃啥就吃啥了,从此背上了房贷。
好了现在回归正题(文末有彩蛋),前面一篇千绝介绍了观察者模式,不知道各位看官老爷看的怎么样,有没有对观察者模式又有了一点新的认识呢,如果有的话那么千绝的目的就达到了,这篇千绝将会介绍设计模式中的迭代器模式,虽然这个模式现在我们大概率不会自己写了,因为java已经做的非常的完善了,但是有一句古话说的好,学习历史,看清方向我们才能更好的前行。
这篇文章千绝会通过一个例子来讲解什么是迭代器模式。
定义
首先惯例我们引用百度百科的内容
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
千绝对这段定义的理解就是:迭代器模式是为了不暴露对象内部使用的是什么数据结构,让外部可以顺序访问对象内部元素的方法
理解还是能理解的,如果不能理解上面的话,千绝会用代码来给你们讲解。
代码
定义一个迭代器的接口
public interface Iterator<T> {
//返回该对象的第一个元素
T first();
//返回该对象的下一个元素
T next();
//判断该对象有没有下一个元素
boolean hasNext();
//返回该对象现在的元素
T getCurrentObj();
}
定义一个实现迭代器的类
public class ConcreateIterator<T> implements Iterator<T> {
List<T> list ;
int current =0;
public ConcreateIterator(List<T> list){
this.list = list;
}
@Override
public T first() {
return list.get(0);
}
@Override
public T next() {
T t = null;
if(this.hasNext()){
t = list.get(current);
current ++ ;
}
return t;
}
@Override
public boolean hasNext() {
if(current < list.size()){
return true;
}
return false;
}
@Override
public T getCurrentObj() {
return list.get(current);
}
}
定义一个聚合接口
public interface Aggregate<T> {
//添加一个对象
void add(T t);
//删除一个对象
void remove(T t);
//生成遍历器
Iterator<T> createIteratory();
}
定义一个实现聚合接口的类
public class ConcreateAggregate<T> implements Aggregate<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 createIteratory() {
return new ConcreateIterator(list);
}
}
定义一个测试类
public class TestIterator {
public static void main(String []args){
ConcreateAggregate<String> concreateAggregate= new ConcreateAggregate<String>();
concreateAggregate.add("测试");
concreateAggregate.add("测试1");
concreateAggregate.add("测试2");
concreateAggregate.add("测试3");
concreateAggregate.add("测试4");
concreateAggregate.add("测试5");
concreateAggregate.add("测试6");
concreateAggregate.remove("测试4");
Iterator iterator = concreateAggregate.createIteratory();
System.out.println("第一个是:" + iterator.first());
System.out.println("当前的元素是: " + iterator.getCurrentObj());
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}

总结
看到这里相信各位看官老爷们都觉得上面的代码都很熟悉了吧,没错千绝是在参考jdk实现迭代器模式的例子,现在java对迭代器运用的已经很好了,我们现在基本上不用自己写迭代器了,有可能是千绝现在写的代码还是太简单,没有遇到过自己写迭代器的情况,所以介绍的有点粗糙还请各位看官老爷们不要介意。
下期预告:原型模式。
如果有喜欢千绝的可以关注、评论、转发一下。
最后你们觉得新房应该入手什么智能家居能提高生活品质呢。
