`
samsongbest
  • 浏览: 161870 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

15 行为模式 - 迭代子(Iterator)模式

 
阅读更多

1.用意

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

 

2.类图

白箱聚集与外禀迭代子

黑箱聚集与内禀迭代子


 

3.代码

白箱聚集与外禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public Iterator createIterator() {
		return null;
	}
}


/*
 * 具体聚集角色
 */
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;
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}


/*
 * 具体迭代子角色
 */
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;
	}

	/*
	 * 移动到第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#first()
	 */
	public void first() {
		index = 0;
	}

	/*
	 * 移动到下一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#next()
	 */
	public void next() {
		if (index < size) {
			index++;
		}
	}

	/*
	 * 是否是第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
	 */
	public boolean isDone() {
		return (index >= size);
	}

	/*
	 * 返还当前元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
	 */
	public Object currentItem() {
		return agg.getElement(index);
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		ConcreteAggregate agg = new ConcreteAggregate();
		Iterator ite = agg.createIterator();
		for (int i = 0; i < agg.size(); i++) {
			S.s(ite.currentItem());
			ite.next();
		}
	}
}

 输出:


 

 

黑箱聚集与内禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public abstract Iterator createIterator();
}


/*
 * 具体聚集角色
 */
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;

		/*
		 * 移动到第一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#first()
		 */
		public void first() {
			currentIndex = 0;
		}

		/*
		 * 移动到下一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#next()
		 */
		public void next() {
			if (currentIndex < objs.length) {
				currentIndex++;
			}
		}

		/*
		 * 是否是最后一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
		 */
		public boolean isDone() {
			return (currentIndex == objs.length);
		}

		/*
		 * 返还当前元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
		 */
		public Object currentItem() {
			return objs[currentIndex];
		}
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}



/*
 * 测试类
 */
public class Test {
	private Iterator it;
	private Aggregate agg = new ConcreteAggregate();

	public void operation() {
		it = agg.createIterator();
		while (!it.isDone()) {
			S.s(it.currentItem().toString());
			it.next();
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.operation();
	}
}
 

 

 

z

  • 大小: 83 KB
  • 大小: 40.1 KB
  • 大小: 10.8 KB
分享到:
评论

相关推荐

    c++设计模式-行为型模式-迭代器模式

    c++设计模式-行为型模式-迭代器模式;qt工程;c++简单源码;迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

    (行为型模式) Iterator 迭代器模式

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式

    java设计模式--迭代器设计模式.docx

    迭代器模式(Iterator Pattern)是一种非常常用的设计模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。 介绍 意图: 提供一种方法顺序访问一个聚合对象中各个...

    C#面向对象设计模式纵横谈\18 行为型模式Iterator迭代器模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第18节:行为型模式Iterator迭代器模式

    迭代器模式(Iterator Pattern)原理图

    迭代器模式(Iterator Pattern)是设计模式中的一种行为模式,它允许顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式提供了一种方法,可以顺序地访问一个聚合对象中的各个元素,而又...

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)

    设计模式--C++

    5.4 ITERATOR(迭代器)—对象行为型模式 171 5.5 MEDIATOR(中介者)—对象行为型模式 181 5.6 MEMENTO(备忘录)—对象行为型模式 188 5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型...

    设计模式_迭代器模式.zip

    迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 迭代器模式 java demo

    PHP设计模式之迭代器模式Iterator实例分析【对象行为型】

    主要介绍了PHP设计模式之迭代器模式Iterator,结合实例形式分析了PHP迭代器模式Iterator相关概念、原理、实现方法与操作注意事项,需要的朋友可以参考下

    设计模式--可复用面向对象软件的基础

    5.4 ITERATOR(迭代器)——对象行为型模式 5.5 MEDIATOR(中介者)——对象行为型模式 5.6 MEMENTO(备忘录)——对象行为型模式 5.7 OBSERVER(观察者)——对象行为型模式 5.8 STATE(状态)——对象行为型模式 ...

    05-容易被忽略的迭代器(1).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    【JDK1.8源码剖析】外部迭代器Iterator接口

    其迭代行为可以挂载到待比较对象的外部, 此外,外部迭代器往往用来支撑内部迭代器的实现。 注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该...

    01-制造工具的工厂模式(1).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    09-通过容器实现的外观模式(2).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    00-初探 Laravel 和其中的设计模式(3).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    12-附录 1 设计模式的七大原则(1).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    design-pattern-java.pdf

    自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...

    C#设计模式_设计模式_C#_

    迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式...

Global site tag (gtag.js) - Google Analytics