工作生活

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

2019-07-04  本文已影响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);
    }
  }
}
 
描述
临时感想
上一篇 下一篇

猜你喜欢

热点阅读