设计模式:迭代器模式

PS:学了迭代器模式,就知道java的集合框架中迭代器访问的原理,原来我以前想的太复杂了。

设计模式:迭代器模式

  • 迭代器模式简介:
    1. 简介:顺序访问集合对象的元素,不需要知道集合对象的底层表示。
    2. 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。
    3. 主要解决:不同的方式来遍历整个整合对象。
    4. 使用场景:
      1. 访问一个聚合对象的内容而无需暴露它的内部表示。
      2. 需要为聚合对象提供多种遍历方式
      3. 遍历不同的聚合结构提供一个统一的接口。
  • 迭代器模式成分
    1. Iterator 接口: hashNext ,和next方法
    2. Container接口:定义getIterator() 方法;
    3. 包含顺序结构的聚合类,并且实现Container,包含内部类 实现Iterator接口。
  • 迭代器模式优缺点:
    1. 优点:
      1. 它支持以不同的方式遍历一个聚合对象
      2. 迭代器简化了聚合类
      3. 在同一个聚合上可以有多个遍历
      4. 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无需修改原有代码。
    2. 缺点:
      1. 由于迭代器模式将存储数据和遍历数据的职责分开,增加新的聚合类需要对应增加新的迭代器类。类的个数成对增加,这在一定程度上增加了系统的复杂性。
  • 迭代器模式实现:
    1. Iterator JIE口
      package com.fg.java.iterator;
      
      public interface Iterator {
          public boolean hashnext();
          public Object
          next();
      }
      

       

    2. Container接口
      package com.fg.java.iterator;
      
      public interface Container {
          public Iterator getIterator();
      }
      

       

    3. 聚合类:
      package com.fg.java.iterator;
      
      public class NameResitory implements Container{
          public String names [] = {"Robert","John","Julie","Lora"};
      
          public Iterator getIterator() {
              return new NameIterator();
          }
      
          private class NameIterator implements  Iterator{
              int index;
      
              public boolean hashnext() {
                  if(index <names.length){
                      return true;
                  }
                  return false;
              }
      
              public Object next() {
                  if(this.hashnext()){
                      return names[index++];
                  }
                  return null;
              }
          }
      }
      

       

    4. Demo
      package com.fg.java.iterator;
      
      public class IteratorDemo {
          public static void main(String args []){
              NameResitory nameResitory = new NameResitory();
              for(Iterator iterator = nameResitory.getIterator();iterator.hashnext();){
                  String name = (String)iterator.next();
                  System.out.println("name"+name);
              }
          }
      }
      

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值