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();
       }
      }
    }
  • 相关阅读:
    encode 与 decode
    pthon_flask小汇总
    jquery 动态添加标签而且指定样式
    设置Myeclipse中的代码格式化、及保存时自动格式化
    a href="javascript:void(0)" 是什么意思?与 a href="#" 加不加上有什么区别?
    String类 与StringBuffer类
    Java中的String类与StringBuffer类
    获取系统的当前时间
    switch 中可以使用字符串当判断条件
    关于接口的那些事
  • 原文地址:https://www.cnblogs.com/code-fun/p/11357806.html
Copyright © 2011-2022 走看看