美文网首页工作生活
设计模式(十二)迭代器模式-管理良好的集合

设计模式(十二)迭代器模式-管理良好的集合

作者: 天色将变 | 来源:发表于2019-07-04 20:35 被阅读0次
定义

迭代器模式提供一种方法,顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

解决的问题

让客户遍历你的对象而又无法窥视你存储对象的方式,也就是说封装集合的遍历方式并对外提供。
也就是让不同集合(List Map int[] set等)元素的访问方式,在某一个点上形成统一,这样使用者就不用具体关心是哪个集合类,只需要调用这个统一的访问方式就行了。

类图
image.png
伪代码
public interface Iterator{
  public boolean hasNext();
  public Obj next();
}
public interface SuperClass{
  public Iterator createIterator();
}
public class Obj1Iterator implements{
  public Obj[] arrs;
  private int position = 0;
  public Obj1Iterator(Obj[] arrs){
    this.arrs = arrs;
  }
  public boolean hasNext(){
    if(position>=arrs.length) return false
    if(arrs[position] == null) return false
    return true;
  }
  public Obj next(){
    Obj obj =  arrs[position];  
    position ++;
    return obj;
  }
}
public class Obj2Iterator implements{
  public List<Obj> list;
  private int position = 0;
  public Obj1Iterator(List<Obj> list;){
    this.list = list;
  }
  public boolean hasNext(){
    if(position>=list.size()) return false
    if(list.get(position) == null) return false
    return true;
  }
  public Obj next(){
    Obj obj =  list.get(position);  
    position ++;
    return obj;
  }
}
public class Obj1 implements SuperClass{
    private Obj[] arrs;
    public  Obj1(){
      arrs = new Obj[3];
      arrs[0] = new Obj(name0);
      arrs[1] = new Obj(name1);
      arrs[2] = new Obj(name2);
    }
  public Iterator createIterator(){
    return new Obj1Iterator(arrs);
  }
}

示例:

public class Client{
  SuperClass obj1,obj2;
  public Client(obj1,obj2){
    this.obj1 = obj1;
    this.obj2 = obj2;
  }
  public void method(){
    Iterator i1 = obj1.createIterator();
    Iterator i2 = obj2.createIterator();
    print(i1);
    print(i2);
  }
  public void print(Iterator it){
    while(it.hasNext()){
      print (it.next().name);
    }
  }
}
 
描述
  • 一个是数组,一个是集合,二者访问元素的方式不同。
  • 两个类的Iterator实现了同一个Iterator,在访问元素的方式上形成统一。
  • 两个类都实现类SuperClass,在createIterator的方式上形成统一。
  • 在Client的print中,只关心Iterator是什么,不用关系具体是数组还是集合。都是一样的访问方式。
临时感想
  • 你想要的是什么
  • 变化的是什么

相关文章

网友评论

    本文标题:设计模式(十二)迭代器模式-管理良好的集合

    本文链接:https://www.haomeiwen.com/subject/qbkdhctx.html