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

    迭代器模式Iterator

    /**
     * 自定义迭代器接口
     * @author 小帆敲代码
     *
     */
    public interface MyIterator {
      void first();//游标置于第一个
      void last();//游标置于最后一个
      
      boolean isfirst();
      boolean isLast();
      
      void next();//游标后移一个
      boolean hasNext();//是否有下一个
      
      Object getCurrentObj();//获得当前对象
    }

    /**
     * 具体聚合类
     * @author 51104
     *
     */
    public class ConcreteAggregation {
      private List<Object> list=new ArrayList<Object>();
      public List<Object> getList() {
       return list;
      }
      public void setList(List<Object> list) {
       this.list = list;
      }
      public void addObj(Object obj) {
       list.add(obj);
      }
      public void removeObj(Object obj) {
       list.remove(obj);
      }
      public MyIterator getMyIterator() {
       return new ConcreteIterator();
      }
      //内部类可以使用外部属性
      private class ConcreteIterator implements MyIterator{
       private int cursor;
       @Override
       public void first() {
        cursor=0;
       }
       @Override
       public void last() {
        cursor=list.size()-1;
       }
       @Override
       public boolean isfirst() {
        return cursor==0?true:false;
       }
       @Override
       public boolean isLast() {
        return cursor==(list.size()-1)?true:false;
       }
       @Override
       public void next() {
         if(cursor<list.size()) {
          cursor+=1;
         }
       }
       @Override
       public boolean hasNext() {
        if(cursor==list.size())
         return false;
        return true;
       }
       @Override
       public Object getCurrentObj() {
        return list.get(cursor);
       }
       
      }
    }
    public class Client {
      public static void main(String[] args) {
       ConcreteAggregation ca=new ConcreteAggregation();
       ca.addObj("aa");
       ca.addObj("bb");
       ca.addObj("cc");
       
       MyIterator mi=ca.getMyIterator();
       while(mi.hasNext()) {
        System.out.println(mi.getCurrentObj());
        mi.next();
       }
      }
    }
  • 相关阅读:
    自动驾驶技术其实是一个美丽的谎言
    自动驾驶技术其实是一个美丽的谎言
    Shoutem旨在成为React Native移动应用领域的WordPress
    Mongodb安装
    spring mvc记录各个controller访问开始结束时间,以及耗时时间 线程安全
    python 升级
    SpringMVC的拦截器Interceptor
    使用org.apache.tools.zip实现zip压缩和解压
    使用 ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体
    Python爬虫入门教程 4-100 美空网未登录图片爬取
  • 原文地址:https://www.cnblogs.com/code-fun/p/11357806.html
Copyright © 2011-2022 走看看