迭代子模式(Iterator Pattern)

本文介绍了迭代子模式的概念及其两种实现方式:白箱聚集与外禀迭代子和黑箱聚集与内禀迭代子。通过Java代码示例展示了如何使用迭代子模式来顺序访问聚集中的元素,同时保持聚集内部结构的隐藏。

    迭代子模式又叫游标模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。
一、类图

迭代子模式(Iterator <wbr>Pattern)

 

 

二、示例
1、结构
迭代子模式(Iterator <wbr>Pattern)
 
迭代子模式(Iterator <wbr>Pattern)
 
 
2、宽接口和窄接口
迭代子模式(Iterator <wbr>Pattern)
迭代子模式(Iterator <wbr>Pattern)
 
 
3、白箱聚集与外禀迭代子
1)结构
迭代子模式(Iterator <wbr>Pattern)
 
 
2)java代码
Aggregate抽象类:
package iterator.whitebox.aggregate;
import iterator.whitebox.iterator.Iterator;
abstract public class Aggregate {
 public Iterator createIterator(){
  return null;
 }
}

 
ConcreteAggregate类:
package iterator.whitebox.aggregate;
import iterator.whitebox.iterator.ConcreteIterator;
import iterator.whitebox.iterator.Iterator;
public class ConcreteAggregate extends Aggregate{
 private Object[] objs = {"Monk Tang","Monkey","Pigsy","Sandy","Horse"};
 public Iterator createIterator(){
  return new ConcreteIterator(this);
 }
 public Object getElement(int index){
  if(index < objs.length){
   return objs[index];
  }else{
   return null;
  }
 }
 public int size(){
  return objs.length;
 }
}

 
Iterator接口:
package iterator.whitebox.iterator;
public interface Iterator {
 public void first();
 public void next();
 public boolean isDone();
 public Object currentItem();
}

 
ConcreteIterator类:
package iterator.whitebox.iterator;
import iterator.whitebox.aggregate.ConcreteAggregate;
public class ConcreteIterator implements Iterator{
 private ConcreteAggregate agg;
 private int index=0;
 private int size=0;
 public ConcreteIterator(ConcreteAggregate agg) {
  this.agg = agg;
  size = agg.size();
  index = 0;
 }
 public void first(){
  index = 0;
 }
 public void next(){
  if(index<size){
   index++;
  }
 }
 public boolean isDone(){
  return (index>=size);
 }
 public Object currentItem() {
  return agg.getElement(index);
 }
}

 
Client类:
package iterator.whitebox;
import iterator.whitebox.aggregate.Aggregate;
import iterator.whitebox.aggregate.ConcreteAggregate;
import iterator.whitebox.iterator.Iterator;
public class Client {
 private Iterator it;
 private Aggregate agg = new ConcreteAggregate();
 public void  operation(){
  it = agg.createIterator();
  while(!it.isDone()){
   System.out.println(it.currentItem().toString());
   it.next();
  }
 }
 public static void main(String[] args){
  Client client = new Client();
  client.operation();
 }
}
 
 
4、黑箱聚集与内禀迭代子
1)结构
   一个黑箱聚集不向外部提供遍历自己元素对象的接口,因此,这些元素对象只可以被聚集内部成员访问。由于内禀迭代子恰好是聚集内部的成员子类,因此,内禀迭代子对象是可以访问聚集的元素的。
迭代子模式(Iterator <wbr>Pattern)
 
2)java代码
Aggregate抽象类:
package iterator.blackbox.aggregate;
import iterator.blackbox.iterator.Iterator;
abstract public class Aggregate {
 public abstract Iterator createIterator();
}

 
ConcreteAggregate类:
package iterator.blackbox.aggregate;
import iterator.blackbox.iterator.Iterator;
public class ConcreteAggregate extends Aggregate{
 private Object[] objs = {"Monk Tang","Monkey","Pigsy","Sandy","Horse"};
 public Iterator createIterator(){
  return new ConcreteIterator();
 }
 private class ConcreteIterator implements Iterator{
  private int currentIndex = 0;
  public Object currentItem() {
   return objs[currentIndex];
  }
  public void first() {
   currentIndex = 0;
  }
  public boolean isDone() {
   return (currentIndex==objs.length);
  }
  public void next() {
   if(currentIndex < objs.length){
    currentIndex++;
   }
  } 
 }
}

 
Iterator接口:
package iterator.blackbox.iterator;
public interface Iterator {
 public void first();
 public void next();
 public boolean isDone();
 public Object currentItem();
}

 
Client类:
package iterator.blackbox;
import iterator.blackbox.aggregate.Aggregate;
import iterator.blackbox.aggregate.ConcreteAggregate;
import iterator.blackbox.iterator.Iterator;
public class Client {
 private Iterator it;
 private Aggregate agg = new ConcreteAggregate();
 public void  operation(){
  it = (Iterator) agg.createIterator();
  while(!it.isDone()){
   System.out.println(it.currentItem().toString());
   it.next();
  }
 }
 public static void main(String[] args){
  Client client = new Client();
  client.operation();
 }
}
 
 

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值