设计模式-行为型-迭代器模式(Iterator)
2012-12-24 11:10
381 查看
概述
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
适用性
1.访问一个聚合对象的内容而无需暴露它的内部表示.
2.支持对聚合对象的多种遍历.
3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代).
参与者
1.Iterator
迭代器定义访问和遍历元素的接口.
2.ConcreteIterator
具体迭代器实现迭代器接口.
对该聚合遍历时跟踪当前位置.
3.Aggregate
聚合定义创建相应迭代器对象的接口.
4.ConcreteAggregate
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.
类图
示例代码:
package com.sql9.actioned;
import java.util.ArrayList;
import java.util.List;
/**
* 迭代器模式 实现示例
* @author sean
*/
interface IIterator<T> {
T next();
void first();
void last();
boolean hasNext();
}
class IIteratorImpl<T> implements IIterator<T> {
private IList<T> list;
private int index;
public IIteratorImpl (IList<T> list) {
index = 0;
this.list = list;
}
@Override
public T next() {
T t = list.get(index);
index++;
return t;
}
@Override
public void first() {
index = 0;
}
@Override
public void last() {
index = list.size();
}
@Override
public boolean hasNext() {
return index < list.size();
}
}
interface IList<T> {
IIterator<T> iterator();
T get(int index);
int size();
void add(T obj);
}
class IListImpl<T> implements IList<T> {
private List<T> list;
private int index;
public IListImpl() {
list = new ArrayList<T>();
index = 0;
}
@Override
public IIterator<T> iterator() {
return new IIteratorImpl<T> (this);
}
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
public void add(T obj) {
list.add(obj);
}
}
public class IteratorTest {
public static void main(String[] args) {
// 2 ways of iteration
IList<String> list = new IListImpl<String>();
list.add(“a”);
list.add(“b”);
list.add(“c”);
// 1st way
System.out.println(“1. using iterator to traverse:”);
IIterator<String> iter = list.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
// 2nd way
System.out.println(“2. using list to traverse: ”);
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
结果:
1. using iterator to traverse:
a
b
c
2. using list to traverse:
a
b
c
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
适用性
1.访问一个聚合对象的内容而无需暴露它的内部表示.
2.支持对聚合对象的多种遍历.
3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代).
参与者
1.Iterator
迭代器定义访问和遍历元素的接口.
2.ConcreteIterator
具体迭代器实现迭代器接口.
对该聚合遍历时跟踪当前位置.
3.Aggregate
聚合定义创建相应迭代器对象的接口.
4.ConcreteAggregate
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.
类图
示例代码:
package com.sql9.actioned;
import java.util.ArrayList;
import java.util.List;
/**
* 迭代器模式 实现示例
* @author sean
*/
interface IIterator<T> {
T next();
void first();
void last();
boolean hasNext();
}
class IIteratorImpl<T> implements IIterator<T> {
private IList<T> list;
private int index;
public IIteratorImpl (IList<T> list) {
index = 0;
this.list = list;
}
@Override
public T next() {
T t = list.get(index);
index++;
return t;
}
@Override
public void first() {
index = 0;
}
@Override
public void last() {
index = list.size();
}
@Override
public boolean hasNext() {
return index < list.size();
}
}
interface IList<T> {
IIterator<T> iterator();
T get(int index);
int size();
void add(T obj);
}
class IListImpl<T> implements IList<T> {
private List<T> list;
private int index;
public IListImpl() {
list = new ArrayList<T>();
index = 0;
}
@Override
public IIterator<T> iterator() {
return new IIteratorImpl<T> (this);
}
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
public void add(T obj) {
list.add(obj);
}
}
public class IteratorTest {
public static void main(String[] args) {
// 2 ways of iteration
IList<String> list = new IListImpl<String>();
list.add(“a”);
list.add(“b”);
list.add(“c”);
// 1st way
System.out.println(“1. using iterator to traverse:”);
IIterator<String> iter = list.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
// 2nd way
System.out.println(“2. using list to traverse: ”);
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
结果:
1. using iterator to traverse:
a
b
c
2. using list to traverse:
a
b
c
相关文章推荐
- 设计模式--迭代器模式Iterator(行为型)
- 设计模式-行为型- 迭代器模式(Iterator)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- C#面向对象模式设计第十八讲:Iterator 迭代器模式(行为型模式)
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式(16)-行为型-迭代器模式(Iterator)
- [导入]C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式.zip(8.04 MB)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式17:Iterator 迭代器模式(行为型模式)
- JAVA设计模式(21):行为型-迭代器模式(Iterator)
- 十九.行为型设计模式——Iterator Pattern(迭代器模式)
- 23种设计模式(15)_行为型_迭代器模式(Iterator Pattern)
- 设计模式学习之迭代器模式(Iterator,行为型模式)(17)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- java-设计模式(行为型)-【迭代器模式】
- [设计模式] 16 迭代器模式 Iterator Pattern