目录
1.核心思想
提供一种方法来顺序访问一个聚合对象(如集合、列表、数组等)中的元素,而无需暴露其内部表示。
2.成员
迭代器(Iterator): 定义了访问集合元素的接口。通常包括hasNext()
(判断是否还有下一个元素)、next()
(获取下一个元素)等方法。
具体迭代器(Concrete Iterator): 实现了迭代器接口,并维护了对集合对象的引用。它负责具体的遍历操作。
聚合对象(Aggregate): 提供创建迭代器的接口。聚合对象可以是列表、集合、队列等。
具体聚合对象(Concrete Aggregate): 实现了聚合接口,并返回一个具体的迭代器对象。它维护了集合中的元素。
3.优点
可以轻松的获得集合里的元素
4.代码实现
public class User {
private String name;
private List<User> friends;
public User(String name) {
this.name = name;
this.friends = new ArrayList<>();
}
public void addFriend(User friend) {
friends.add(friend);
}
public String getName() {
return name;
}
public List<User> getFriends() {
return friends;
}
}
public class FriendIterator implements Iterator<User> {
private List<User> friends;
private int position;
public FriendIterator(List<User> friends) {
this.friends = friends;
this.position = 0;
}
@Override
public boolean hasNext() {
return position < friends.size();
}
@Override
public User next() {
if (!hasNext()) {
throw new NoSuchElementException("No more friends to iterate over.");
}
User friend = friends.get(position);
position++;
return friend;
}
}
public class Test {
public static void main(String[] args) {
User alice = new User("11");
User bob = new User("22");
User charlie = new User("33");
alice.addFriend(bob);
alice.addFriend(charlie);
Iterator<User> friendIterator = new FriendIterator(alice.getFriends());
while (friendIterator.hasNext()) {
User friend = friendIterator.next();
System.out.println(alice.getName() + "的朋友是" + friend.getName());
}
}
}