设计模式入门:迭代器模式
来源:互联网 发布:螺旋打印二维数组 编辑:程序博客网 时间:2024/05/21 16:06
很长时间没写博客,因为学了一门慕课网的实战课程。全慕课网规模最大的实战课程(就是那个IM项目)。因为实在是太难了,而且规模巨大,加上最近要期末考试……好了,期末基本考完了,继续学习IM。空闲时间看一下设计模式。今天开始入门设计模式:迭代器模式。
(迭代器本身是翻译的问题,如果从字面半身来看,应该是叫“重复的做某一件事”。没错,迭代可以说就是循环的别称)
下面用一个很简单的例子来说明迭代器的用途吧:比如我们要遍历一个班上所有的学生
首先我们创建一个学生类,然后创建一个学生集合,然后遍历这个集合。
稍微写一下代码(一会 就在这个代码基础上修改嘛):
public class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
然后在Main类里面遍历就可以了
public class Main { public static void main(String[] args){ List<Student>students=new ArrayList<>(); for(int i=0;i<5;i++){ students.add(new Student("student"+i)); System.out.println(students.get(i).getName()); }}}
这是最简单的迭代器的使用,不夸张的说,一个刚刚入门java的大一新生都是这样写的。下面讲一下用了迭代器模式的写法。第一步:定义迭代器public interface Iterator { public abstract boolean hasNext(); public abstract Object next();}迭代器里面只有两个方法,先判断这个学生后面还有没有学生。如果有就继续,没有就结束。当然,这两个方法在这里还没写。第二步:定义接口的集合public interface Aggregate { public abstract Iterator iterator();}在这里使用迭代器模式只需要使用一个方法就可以了。第三步:创建Student类其实就是上面的student类,不需要改变public class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}第四步:创建班级public class StudentClass implements Aggregate{ private List<Student>students=new ArrayList<>(); //添加一个学生 public void addStudent(Student student){ students.add(student); } //获取班级人数 public int getLength(){ return students.size(); } //按照下标获取学生 public Student getStudent(int position){ return students.get(position); } //迭代器 public Iterator iterator(){ return new StudentClassIterator(this); }}班级其实就是学生的集合,同时要有迭代器第五部:当然是写用来遍历班级的类了public class StudentClassIterator implements Iterator{ private StudentClass studentClass; private int index; public StudentClassIterator(StudentClass studentClass) { this.studentClass = studentClass; this.index=0; } @Override public boolean hasNext() { if(index<studentClass.getLength()) return true; else return false; } @Override public Object next() { Student student=studentClass.getStudent(index); index++; return student; }}很简单,基本上一看就知道。index是下标,构造函数传入一个“班级”就可以。如果下标小于班级人数就继续,否则就结束。next方法的作用就是下标增加同时获取下标所指的学生。
最后一步:使用迭代器模式
public class Main { public static void main(String[] args){ StudentClass studentClass=new StudentClass(); for(int i=0;i<5;i++){ studentClass.addStudent(new Student("student"+i)); } Iterator iterator=studentClass.iterator(); while (iterator.hasNext()){ Student student= (Student) iterator.next(); System.out.println(student.getName()); } }}这种设计模式的步骤相对于实现的功能来说十分繁琐。但是确实是很有必要的。
我们编写的代码不仅仅是给自己用的,更多的时候需要合作才可以,我们的代码要尽可能做到低耦合!
我个人对低耦合的理解就是:尽量不要依赖具体的类来解决问题
在这里,完成遍历并没有调用studentClass的方法,所以说,迭代器的hasNext和Next方法就没有依赖studentclass的实现。
阅读全文
0 0
- 设计模式入门:迭代器模式
- 设计模式入门之迭代器模式Iterator
- 设计模式入门-观察者模式
- 设计模式入门--观察者模式
- 设计模式入门--工厂模式
- 设计模式入门-模板模式
- 设计模式入门-工厂模式
- 设计模式入门-策略模式
- .net设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- 书评--设计模式入门
- socket通信
- 第一篇博客
- Mysql数据库调优和性能优化的21条最佳实践
- Unity Shader之波浪效果
- 《人工智能三愿》笔记
- 设计模式入门:迭代器模式
- Android 静态方法调用非静态方法
- 隐藏驱动模块(源码)
- 《【NSR】中国人工智能迎来黄金时代,跟风发展快但缺乏重大突破》笔记
- 单例模型
- 数据结构实验报告-图算法-最小生成树-最短路-拓扑排序-搜索
- 【原创】KM算法的Bfs写法
- 转载 mysql 数据库优化配置实例
- cordova开发:android端用video.js播放视频,解决退出全屏后应用被状态栏遮挡