博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——16迭代子模式(Iterator)
阅读量:6280 次
发布时间:2019-06-22

本文共 1708 字,大约阅读时间需要 5 分钟。

16、迭代子模式(Iterator)

顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。

这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,我们来看看实现代码:

两个接口:
[java] view plaincopy

  1. public interface Collection {
  2. public Iterator iterator();
  3. /取得集合元素/
  4. public Object get(int i);
  5. /取得集合大小/
  6. public int size();
  7. }
    [java] view plaincopy
  8. public interface Iterator {
  9. //前移
  10. public Object previous();
  11. //后移
  12. public Object next();
  13. public boolean hasNext();
  14. //取得第一个元素
  15. public Object first();
  16. }
    两个实现:

[java] view plaincopy

  1. public class MyCollection implements Collection {
  2. public String string[] = {"A","B","C","D","E"};
  3. @Override
  4. public Iterator iterator() {
  5. return new MyIterator(this);
  6. }
  7. @Override
  8. public Object get(int i) {
  9. return string[i];
  10. }
  11. @Override
  12. public int size() {
  13. return string.length;
  14. }
  15. }
    [java] view plaincopy
  16. public class MyIterator implements Iterator {
  17. private Collection collection;
  18. private int pos = -1;
  19. public MyIterator(Collection collection){
  20. this.collection = collection;
  21. }
  22. @Override
  23. public Object previous() {
  24. if(pos > 0){
  25. pos--;
  26. }
  27. return collection.get(pos);
  28. }
  29. @Override
  30. public Object next() {
  31. if(pos
  32. pos++;
  33. }
  34. return collection.get(pos);
  35. }
  36. @Override
  37. public boolean hasNext() {
  38. if(pos
  39. return true;
  40. }else{
  41. return false;
  42. }
  43. }
  44. @Override
  45. public Object first() {
  46. pos = 0;
  47. return collection.get(pos);
  48. }
  49. }
    测试类:

[java] view plaincopy

  1. public class Test {
  2. public static void main(String[] args) {
  3. Collection collection = new MyCollection();
  4. Iterator it = collection.iterator();
  5. while(it.hasNext()){
  6. System.out.println(it.next());
  7. }
  8. }
  9. }
    输出:A B C D E

此处我们貌似模拟了一个集合类的过程,感觉是不是很爽?其实JDK中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!

转载地址:http://ausva.baihongyu.com/

你可能感兴趣的文章
设置Serv-U FTP 支持被动模式连接 ,530错误等解决办法集锦
查看>>
zabbix3.0安装教程(环境)
查看>>
关于linux系统下批量修改文件名和后缀
查看>>
我和linux的第二十四天
查看>>
互联网公司的分布排行
查看>>
'latin-1' codec can't encode characters……
查看>>
查看aix系统故障记录收集信息
查看>>
博士生涯
查看>>
【OFFICE2010安装】Error 1406
查看>>
dsh 批量管理服务器
查看>>
centos7.3二进制安装mariadb
查看>>
吉林出差所见、所闻、所感
查看>>
RHEL7修改root用户密码
查看>>
mysqldump导出 timestamp类型数据 时区偏差8小时
查看>>
我的友情链接
查看>>
中小型企业如ERP选型四大标准
查看>>
笔记——quota磁盘配额
查看>>
索引表批量数据装载
查看>>
@Value("#{}")与@Value("${}")的区别
查看>>
Zabbix邮件报警设置方法
查看>>