编程-设计模式 16:迭代器模式

设计模式 16:迭代器模式

定义与目的
  • 定义:迭代器模式提供一种方法来顺序访问聚合对象中封装的各个元素,而又不暴露该对象的内部表示。
  • 目的:该模式的主要目的是为遍历不同的聚合结构提供一个一致的接口,使得客户端可以在不知道聚合对象内部结构的情况下遍历其元素。
实现示例

假设我们有一个菜单系统,需要支持不同的菜单结构,如列表菜单和分层菜单。我们可以使用迭代器模式来实现这个需求。

// 抽象聚合
interface Menu {
    Iterator createIterator();
}

// 抽象迭代器
interface Iterator {
    boolean hasNext();
    MenuItem next();
}

// 具体聚合 - 列表菜单
class ListMenu implements Menu {
    private List<MenuItem> items = new ArrayList<>();

    public void addItem(MenuItem item) {
        items.add(item);
    }

    @Override
    public Iterator createIterator() {
        return new ListIterator(items.iterator());
    }

    private static class ListIterator implements Iterator {
        private Iterator<MenuItem> iterator;

        public ListIterator(Iterator<MenuItem> iterator) {
            this.iterator = iterator;
        }

        @Override
        public boolean hasNext() {
            return iterator.hasNext();
        }

        @Override
        public MenuItem next() {
            return iterator.next();
        }
    }
}

// 具体聚合 - 分层菜单
class HierarchicalMenu implements Menu {
    private List<MenuItem> items = new ArrayList<>();

    public void addItem(MenuItem item) {
        items.add(item);
    }

    @Override
    public Iterator createIterator() {
        return new HierarchicalIterator(items.iterator());
    }

    private static class HierarchicalIterator implements Iterator {
        private Iterator<MenuItem> iterator;

        public HierarchicalIterator(Iterator<MenuItem> iterator) {
            this.iterator = iterator;
        }

        @Override
        public boolean hasNext() {
            return iterator.hasNext();
        }

        @Override
        public MenuItem next() {
            return iterator.next();
        }
    }
}

// 具体元素 - 菜单项
class MenuItem {
    private String name;

    public MenuItem(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Menu listMenu = new ListMenu();
        listMenu.addItem(new MenuItem("Coffee"));
        listMenu.addItem(new MenuItem("Tea"));

        Menu hierarchicalMenu = new HierarchicalMenu();
        hierarchicalMenu.addItem(new MenuItem("Burger"));
        hierarchicalMenu.addItem(new MenuItem("Fries"));

        Iterator listIterator = listMenu.createIterator();
        while (listIterator.hasNext()) {
            MenuItem item = listIterator.next();
            System.out.println(item.getName());
        }

        Iterator hierarchicalIterator = hierarchicalMenu.createIterator();
        while (hierarchicalIterator.hasNext()) {
            MenuItem item = hierarchicalIterator.next();
            System.out.println(item.getName());
        }
    }
}
使用场景
  • 当你需要提供一个一致的方法来遍历不同的聚合结构时。
  • 当你不希望客户端知道聚合对象的内部结构时。

迭代器模式通过为遍历不同的聚合结构提供一个一致的接口,使得客户端可以在不知道聚合对象内部结构的情况下遍历其元素。这对于需要遍历不同类型的聚合结构的场景非常有用。

小结

迭代器模式是一种常用的行为型模式,它可以帮助你为遍历不同的聚合结构提供一个一致的接口。这对于需要遍历不同类型的聚合结构的场景非常有用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值