建设项目环境影响登记表备案系统网站,微网站开发与制作个人总结,网站上推广游戏怎么做,住建部网站统计城乡建设统计信息系统登录写在前面
本文一起看下一种行为型设计模式#xff0c;迭代器模式。
1#xff1a;介绍
1.1#xff1a;什么时候使用迭代器设计模式
当对象的内部有一批数据#xff0c;希望能够对外暴露访问#xff0c;但因为如下的原因不希望外部直接访问内部的具体存储数据的元素迭代器模式。
1介绍
1.1什么时候使用迭代器设计模式
当对象的内部有一批数据希望能够对外暴露访问但因为如下的原因不希望外部直接访问内部的具体存储数据的元素
1:内部元素具体是什么结构是不稳定的可能会随时改变改变后之前的客户端代码将不可用
2内部元素直接暴露可能会引起数据的安全问题外部有意或者是无疑的数据修改会引起不可预知的bug此时就可以考虑使用迭代器设计模式。
1.2UML类图
原型设计模式包含如下元素
1Iterable可迭代接口定义了可以获取数据的迭代器
2Iterator迭代器接口定义了具体迭代获取数据的方法
4客户端通过迭代器获取数据 2实例
源码 。
2.1场景
记得大学时总是时常会逃课在寝室聊大天睡大觉但一旦好基友发来消息“老师点名了”此时的我们用百米冲刺的速度冲向教师现在想起来只有一个感觉“累是真的累到喘不过气”。今天我们就以老师点名为场景来共同学习迭代器设计模式也以此来缅怀美好的大学时光缅怀逝去的被挥霍的青春
2.2程序
可迭代接口 该接口说明该类是可被迭代的可以通过某方法获取一个迭代器
public interface MyIterableT {MyIterator T iterator();
}通过iterator方法获取了迭代器MyIterator下面来定义。
迭代器
public interface MyIteratorT {boolean hasNext();T next();
}定义学生
AllArgsConstructor
ToString
public class Student {private String name;private int age;
}定义课堂
/public class Classs implements IterableStudent {
public class Classs implements MyIterableStudent {private final ListStudent students new ArrayList();public Classs() {students.add(new Student(王二狗, 28));students.add(new Student(牛翠花, 20));students.add(new Student(林蛋大, 29));}public boolean addStudent(Student student){return students.add(student);}public boolean removeStudent(Student student){return students.remove(student);}Overridepublic MyIteratorStudent iterator() {return new Itr();}private class Itr implements MyIteratorStudent {int index 0;Overridepublic boolean hasNext() {if (index students.size()) {return true;}return false;}Overridepublic Student next() {Student student students.get(index);index;return student;}}
}测试 Test
public void checkAttendance(){Classs cls new Classs();System.out.println(--------------开始点名--------------);
// IteratorStudent iterator cls.iterator();MyIteratorStudent iterator cls.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}
}输出
--------------开始点名--------------
Student(name王二狗, age28)
Student(name牛翠花, age20)
Student(name林蛋大, age29)Process finished with exit code 0写在后面
其实迭代器设计模式在jdk中已经提供了实现并得到了广泛的应用其中的可迭代接口是java.lang.Iterable,迭代器接口是java.util.Iterator,我们肯定经常写如下的代码
List list new ArrayList();
Iterator it list.iterator();
while(it.hasNext()){System.out.println(it.next());
}其实就是在使用迭代器设计模式。所以如果是工作中真的需要迭代器设计模式来解决问题可迭代接口和迭代器接口是不需要自己定义的直接使用jdk定义的就行了因为使用jdk定义还能带来额外的好处比如可以使用增强for循环等。
参考文章列表
秒懂设计模式之迭代器模式Iterator Pattern 。