zoukankan      html  css  js  c++  java
  • 迭代器模式

      迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

      在设计中使用迭代器模式的影响:如果你有一个统一的方法访问聚合中的每一个对象,你就可以编写多态的代码和这些聚合搭配(当我们写了一个需要以迭代器当做参数的方法时,其实就是在使用多态的迭代。也就是说,我们所写出的代码,可以在不同的集合中游走,只要这个集合支持迭代器即可(实现该接口),比如下面代码示例中的类IteratorA和IteratorB);迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象。这不仅让聚合的接口和实现变得简洁,也可以让聚合更专注它应该专注的事情上面(也就是管理对象集合),而不必去理会遍历的事情。

      代码示例:假如有两种聚合对象 数组 和 ArrayList,现在使用迭代器模式来封装遍历要素。

      先写一个迭代器接口:

    public interface Iterator 
    {
        public boolean HasNext();
    
        public Object Next();
    }

      然后分别用各自的遍历规则实现接口Iterator。。。

    IteratorA :
    public class IteratorA implements Iterator
    {
        Object[] objects;
    
        int position;
    
        public IteratorA(Object[] objects)
        {
            this.objects = objects;
        }
    
        public Object Next()
        {
            Object object = objects[position];
            position = position + 1;
            return object;
        }
    
        public boolean HasNext()
        {
            if (position >= objects.length || objects[position] = null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    }

     IteratorB :

    public class IteratorB implements Iterator
    {
        ArrayList objects;
    
        int position;
    
        public IteratorB(ArrayList objects)
        {
            this.objects = objects;
        }
    
        public Object Next()
        {
            Object object = objects.get(position);
            position = position + 1;
            return object;
        }
    
        public boolean HasNext()
        {
            if (position >= objects.size() || objects.get(position) = null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    }

      这样通过“针对接口编程,而不针对实现编程”,就可以减少对具体类的依赖,而且还可以不暴露其内部的表示。

  • 相关阅读:
    控制器之间的通信(传值方法)以及多次调用通信
    关于ios项目沙盒中的文件和Xcode项目创建的文件
    解决cell循环利用造成的重复勾选
    让TabelView视图中自定义的Toolbar固定(不随cell的移动而移动)
    jsonString转NSDictionary
    日期字符串转换 and 两个日期相减
    Java虚拟机 简介
    浅谈操作系统对内存的管理(转)
    Java虚拟机规范(Java SE 7)笔记
    StringUtils
  • 原文地址:https://www.cnblogs.com/hachun/p/3620601.html
Copyright © 2011-2022 走看看