大话设计模式之迭代器模式

    今天总结一下迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,但由于它太普遍了,所以各种高级语言都对它进行了封装,我们对它进行总结主要就是方便我们日后总结源码。

迭代器的实现

    我们来看一下迭代器模式的UML图:


    同样的,我们根据UML图去实现一下

public interface Iterator<T> {  
        boolean hasNext();  
      
         T next();  
    }   
    
    
    public class ConcreteIterator<T> implements Iterator{  
        private List<T> list = new ArrayList<>();  
        private int cursor = 0;  
      
        @Override  
        public boolean hasNext() {  
            return cursor != list.size();  
        }  
      
        @Override  
        public Object next() {  
            T obj = null;  
            if(this.hasNext()){  
                obj = this.list.get(cursor++);  
            }  
            return obj;  
        }  
    }  
    
    
    public interface Aggregate<T> {  
        void add(T obj);  
      
        void remove(T obj);  
      
        Iterator<T>  iterator();  
      
    }  
    
    
    public class ConcreteAggregate<T> implements Aggregate<T>{  
        private List<T> list = new ArrayList<>();  
      
        @Override  
        public void add(T obj) {  
            list.add(obj);  
        }  
      
        @Override  
        public void remove(T obj) {  
            list.remove(obj);  
        }  
      
        @Override  
        public Iterator<T> iterator() {  
            return new ConcreteIterator<>();  
        }  
    }  
    
    public class Client {  
        public  void main(String[] args){  
            Aggregate<String> a = new ConcreteAggregate<>();  
            a.add("Aige");  
            a.add("Studio\n");  
            a.add("SM");  
            a.add("Brother");  
            Iterator<String> i = a.iterator();  
            while(i.hasNext()){  
                System.out.println(i.next());  
            }  
        }  
    }  
    在java集合框架源码中,就封装了迭代器,因此大多数情况下是不要求我们自己写迭代器的,总结迭代器模式主要是为了后期研究源码, 对于迭代模式来说,其自身优点很明显也很单一,支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法之间的关系,而缺点就是对类文件的增加。

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值