zoukankan      html  css  js  c++  java
  • 设计模式(二十一)------23种设计模式(13):迭代器模式

    使用频率:★★★★★

    一、什么是迭代器模式

    提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

    二、补充说明

    单一职责原则,分离了集合对象的遍历行为,抽象出一个迭代器类来负责;

    三、角色

    迭代器接口

    迭代器具体实现

    抽象容器

    具体容器

    四、例子,JAVA实现

    例子说明:使用迭代器遍历容器

    迭代器接口

    复制代码
    package com.pichen.dp.behavioralpattern.iterator;
    
    
    public interface Iterator {
        public Object first();
        
        public Object previous();
        
        public Object next();
    
        public boolean hasNext();
    
    }
    复制代码

    迭代器具体实现

    复制代码
    package com.pichen.dp.behavioralpattern.iterator;
    
    import java.util.List;
    
    
    public class MyIterator implements Iterator{
        private List<Object> list;
        private int index = 0;
    
        public MyIterator(List<Object> list) {
            this.list = list;
        }
        @Override
        public Object previous() {
            if((this.index - 1) < 0){
                return null;
            }else{
                return this.list.get(--index);
            }
            
        }
    
    
        @Override
        public Object next() {
            if((this.index + 1) >= this.list.size()){
                return null;
            }else{
                return this.list.get(++index);
            }
        }
    
    
        @Override
        public boolean hasNext() {
            if(this.index < (this.list.size() - 1)){
                return true;
            }
            return false;
        }
        /**
         * 〈一句话功能简述〉
         * 〈功能详细描述〉
         * @see com.pichen.dp.behavioralpattern.iterator.Iterator#first()
         * @return
         */
        @Override
        public Object first() {
            if(this.list.size() <= 0){
                return null;
            }else{
                return this.list.get(0);
            }
        }
    
    }
    复制代码

    抽象容器

    复制代码
    package com.pichen.dp.behavioralpattern.iterator;
    
    
    public abstract class Container {
    
        public abstract Iterator iterator();
        
        public abstract void put(Object obj);
    }
    复制代码

    具体容器

    复制代码
    package com.pichen.dp.behavioralpattern.iterator;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    
    public class MyContainer extends Container{
        private List<Object> list;
        
        public MyContainer() {
            this.list = new ArrayList<Object>();
        }
        @Override
        public void put(Object obj){
            this.list.add(obj);
        }
        @Override
        public Iterator iterator() {
            return new MyIterator(list);
        }
    
    }
    复制代码

    客户端调用示例

    复制代码
    package com.pichen.dp.behavioralpattern.iterator;
    
    public class Main {
    
        public static void main(String[] args) {
    
            //创建一个自定义容器,直接使用ArrayList的实现,仅仅示例作用
            Container strContainer = new MyContainer();
            strContainer.put("001");
            strContainer.put("002");
            strContainer.put("003");
            
            Iterator myIterator = strContainer.iterator();
            //使用举例
            System.out.println("------------------next、hasNext示例------------------");
            System.out.println(myIterator.first());
            System.out.println(myIterator.next());
            System.out.println(myIterator.hasNext());
            System.out.println(myIterator.next());
            System.out.println(myIterator.hasNext());
            System.out.println(myIterator.next());
            System.out.println(myIterator.hasNext());
            
            //使用举例
            System.out.println("------------------previous、hasNext示例------------------");
            System.out.println(myIterator.previous());
            System.out.println(myIterator.previous());
            System.out.println(myIterator.previous());
            System.out.println(myIterator.hasNext());
            
            //使用迭代器遍历
            System.out.println("------------------迭代器遍历示例------------------");
            System.out.println(myIterator.first());
            while(myIterator.hasNext()){
                System.out.println(myIterator.next());
            }
        }
    }
    复制代码

    结果打印

    复制代码
    ------------------next、hasNext示例------------------
    001
    002
    true
    003
    false
    null
    false
    ------------------previous、hasNext示例------------------
    002
    001
    null
    true
    ------------------迭代器遍历示例------------------
    001
    002
    003
    复制代码

    @Author      风一样的码农
    @HomePageUrl http://www.cnblogs.com/chenpi/ 
    @Copyright      转载请注明出处,谢谢~ 
  • 相关阅读:
    DevCon 5 2019 活动照片
    区块链小册 | 必知的运营常识
    区块链小册 | 必知的运营渠道
    产品经理需求沟通的艺术
    作为产品经理要如何面对失败?
    展示亚洲金融科技状况的 15 张金融科技地图
    成为区块链行业的产品经理是什么感觉
    腾讯产品经理能力模型
    jQuery 知识点大纲
    call()与apply()区别
  • 原文地址:https://www.cnblogs.com/chz-blogs/p/9380966.html
Copyright © 2011-2022 走看看