设计模式:迭代器模式
程序员文章站
2022-04-18 15:29:13
迭代器模式又称游标模式,该模式可以顺序访问一个集合中元素而不必暴露集合内部对象。 在Java集合框架Collection中广泛使用该模式来遍历内部元素。所有熟悉java语言的应该都了解并应用过。 采用迭代器遍历对象。 迭代器结构: 聚合对象(collection):存储数据 迭代器:遍历数据 例子: ......
迭代器模式又称游标模式,该模式可以顺序访问一个集合中元素而不必暴露集合内部对象。
在java集合框架collection中广泛使用该模式来遍历内部元素。所有熟悉java语言的应该都了解并应用过。
采用迭代器遍历对象。
迭代器结构:
聚合对象(collection):存储数据
迭代器:遍历数据
例子:
简单自己实现一个列表元素的迭代器。
public interface myiterator {
//指向第一个元素
void first();
//指向下一个元素
object next();
//是否存在下一个元素
boolean hasnext();
boolean isfirst();
boolean islast();
}
/**
* 自定义集合对象
*/
public class mycollection {
private list<object> list = new arraylist<>();
public void add(object obj) {
list.add(obj);
}
public void remove(object obj) {
list.remove(obj);
}
public list<object> getlist() {
return list;
}
public void setlist(list<object> list) {
this.list = list;
}
public myiterator iterator() {
return new selfiterator();
}
class selfiterator implements myiterator {
//定义一个索引位置表示游标
private int index;
//指向第一个元素即索引为0
@override
public void first() {
index = 0;
}
@override
public object next() {
if (index < list.size()) {
object obj = list.get(index);
index++;
return obj;
}
return null;
}
@override
public boolean hasnext() {
return index < list.size();
}
@override
public boolean isfirst() {
return index == 0;
}
@override
public boolean islast() {
return index == (list.size() - 1);
}
}
}
简化起见,在这个集合对象封装一个数组,初始化时就创建好该数组
public class client {
public static void main(string[] args) {
mycollection collection = new mycollection();
collection.add("1");
collection.add("2");
collection.add("3");
myiterator iterator = collection.iterator();
while (iterator.hasnext()){
system.out.println(iterator.next());
}
}
}
迭代器模式使遍历算法和集合对象分开,单独被封装在迭代子对象中,外部只需要调用迭代子对象的方法。
迭代和集合对象解耦。新增迭代方式的时候可以不用修改集合对象,只需新增迭代器对象即可,符合开闭原则。
上一篇: 看起来,这是一场意外吧!
下一篇: 罗嗦一句:吸烟有害健康!