迭代器模式

目录

1.核心思想

2.成员

3.优点

4.代码实现


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());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值