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

    类图

     

    源码

    AbstractIterator.java 抽象迭代器
    package com.iterator;
    
    
    public abstract class AbstractIterator {
        //抽象迭代器类
        //移到下一个元素
        public abstract void next();
        
        //移到上一个元素
        public abstract void previous();
        
        //获取上一个元素返回object
        public abstract Object getPrevious();
        
        //获取下一个元素放回OBJECT
        public abstract Object getNext();
        //是否是第一个元素boolean
        public abstract boolean isNext();
        //是否是最后一个元素
        public abstract boolean isFrist();
        
    }
    
    ProducteIterator.java
    package com.iterator;
    
    import java.util.ArrayList;
    import java.util.List;
     
    public class ProducteIterator extends AbstractIterator {
        private List<Object> objectList = new ArrayList<Object>();
        private int cursor1;    //游标
        private int cursor2;    //游标2
        
        public ProducteIterator(ConcreteObjectList obj) {
            // TODO Auto-generated constructor stub
            this.objectList=obj.getObjectList();
            cursor1=0;
            cursor2=objectList.size()-1;
        }
        @Override
        public void next() {
            // TODO Auto-generated method stub
            if(cursor1<objectList.size()) {
                cursor1++;
            }
        }
     
        @Override
        public void previous() {
            // TODO Auto-generated method stub
            if(cursor2>-1) {
                cursor2--;
            }
        }
     
        @Override
        public Object getPrevious() {
            // TODO Auto-generated method stub
            return objectList.get(cursor2);
        }
     
        @Override
        public Object getNext() {
            // TODO Auto-generated method stub
            return objectList.get(cursor1);
        }
     
        @Override
        public boolean isNext() {
            // TODO Auto-generated method stub
            return (cursor1==objectList.size());
        }
     
        @Override
        public boolean isFrist() {
            // TODO Auto-generated method stub
            return (cursor2==-1);
        }
     
    }
    
    AbstractObjectList.java    抽象聚合对象
    
    package com.iterator;
    
    import java.util.*;
     
    public abstract class AbstractObjectList {
        //创建一个object 的arraylist集合
        protected List<Object> objectList = new ArrayList<Object>();
        public AbstractObjectList(List<Object> list) {
            // TODO Auto-generated constructor stub
            this.objectList=list;
        }
        //添加方法。
        public void AddObject(Object o) {
            this.objectList.add(o);
        }
        //删除方法。
        public void RemoveObject(Object o) {
            this.objectList.remove(o);
        }
        //获取到list
        public List<Object> getObjectList(){
            return objectList;
        }
        //获取arrayList
        //获取迭代器的工厂方法
        public abstract AbstractIterator createIterator();
     
    }
    
    ConcreteObjectList.java 具体聚合对象
    package com.iterator;
    
    import java.util.*;
     
    public abstract class AbstractObjectList {
        //创建一个object 的arraylist集合
        protected List<Object> objectList = new ArrayList<Object>();
        public AbstractObjectList(List<Object> list) {
            // TODO Auto-generated constructor stub
            this.objectList=list;
        }
        //添加方法。
        public void AddObject(Object o) {
            this.objectList.add(o);
        }
        //删除方法。
        public void RemoveObject(Object o) {
            this.objectList.remove(o);
        }
        //获取到list
        public List<Object> getObjectList(){
            return objectList;
        }
        //获取arrayList
        //获取迭代器的工厂方法
        public abstract AbstractIterator createIterator();
     
    }
    
    Client.java 测试类
    
    package com.iterator;
    import java.util.ArrayList;
    import java.util.List;
     
    public class Client {
        public static void main(String[] args) {
            List<Object> list1 =new ArrayList<Object>();
            AbstractObjectList list = new ConcreteObjectList(list1);
            list.AddObject("20193901");
            list.AddObject("20193902");
            list.AddObject("20193903");
            list.AddObject("20193904");
            list.AddObject("20193905");
            list.AddObject("20193906");
            list.AddObject("20193907");
            list.AddObject("20193908");
            list.AddObject("20193909");
            list.AddObject("20193910");
            list.AddObject("20193911");
            list.AddObject("20193912");
            
            AbstractIterator iterator =list.createIterator();
            System.out.println("正向遍历");
            
            while(!iterator.isNext()) {
                System.out.print(iterator.getNext()+"\n");
                iterator.next();
            }
            
            //反向遍历
            System.out.println("反向遍历");
            while(!iterator.isFrist()) {
                System.out.print(iterator.getPrevious()+"\n");
                iterator.previous();
            }
        }
    }

    测试截图

     

  • 相关阅读:
    SolarWinds Orion API 远程代码执行漏洞(CVE-2020-10148)
    Lanproxy 路径遍历漏洞 (CVE-2021-3019)
    公众号文章集合-2020整理回顾
    PHPMailer远程命令执行漏洞复现
    SaltStack Shell 注入 (CVE-2020-16846)漏洞
    (CVE-2020-7961)Liferay Portal RCE 反序列化命令执行漏洞
    (CVE-2020-17530)Struts2 S2-061 远程命令执行漏洞复现
    ora-01722 无效数字
    公开课平台推荐
    PL/SQL Developer如何导出数据成sql的insert语句
  • 原文地址:https://www.cnblogs.com/lx06/p/15688547.html
Copyright © 2011-2022 走看看