首页 > 其他分享 >迭代器模式

迭代器模式

时间:2024-09-17 15:15:34浏览次数:6  
标签:遍历 迭代 Iterator list 模式 集合 public

迭代器模式

迭代器模式(Iterator Pattern)是一种行为设计模式,旨在提供一种方法顺序访问一个聚合对象(如列表、集合)中的各个元素,而无需暴露其内部表示。这种模式的核心是将遍历行为封装在迭代器对象中,使得客户端代码可以统一地处理不同类型的集合或容器。

主要角色

  1. 迭代器接口(Iterator):定义了访问和遍历元素的方法,例如 hasNext()next()
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,负责遍历集合中的元素。
  3. 聚合接口(Aggregate):定义创建迭代器的接口,如 createIterator()
  4. 具体聚合(Concrete Aggregate):实现聚合接口,通常会包含集合的实现并返回一个具体的迭代器实例。

迭代器模式的优点

  • 分离遍历算法与集合结构:通过引入迭代器,集合的内部结构对客户端是透明的,客户端无需了解集合的内部结构就可以遍历其中的元素。
  • 支持不同集合的统一遍历:可以使用同一套遍历逻辑来处理不同类型的集合,如数组、链表、树等。
  • 单一职责原则:将遍历操作从集合类中分离出来,简化了集合类的设计。

迭代器模式的缺点

  • 额外的类和对象:引入了迭代器类,可能会增加程序的复杂性。
  • 对资源消耗较大的遍历不友好:如果集合非常庞大或遍历操作开销较大,迭代器模式的实现可能不是最佳选择。

示例代码

//迭代器接口(Iterator)
public interface Iterator {
    boolean hasNext();
    Object next();
}
//具体迭代器(Concrete Iterator)
public class ConcreteIterator implements Iterator {
    private List<Object> list;
    private int position;

    public ConcreteIterator(List<Object> list) {
        this.list = list;
        this.position = 0;
    }

    @Override
    public boolean hasNext() {
        return position < list.size();
    }

    @Override
    public Object next() {
        if (hasNext()){
            return list.get(position++);
        }
        return null;
    }
}

//聚合接口(Aggregate)
public interface Aggregate {
    Iterator createIterator();
}
//具体聚合(Concrete Aggregate)
public class ConcreteAggregate implements Aggregate {
    private List<Object> list = new ArrayList<>();

    void add(Object o){
        list.add(o);
    }

    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(list);
    }
}

//客户端
public class TestIteratorPattern {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.add(" 第一个 ");
        aggregate.add(" 第二个 ");
        aggregate.add(" 第三个 ");

        Iterator iterator = aggregate.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}


应用场景

  • 访问集合对象的内容而不暴露它的内部表示
  • 为遍历不同集合结构提供统一的接口
  • 需要支持多个遍历方式时(如正序、倒序遍历)

迭代器模式在处理集合、容器等数据结构时,可以极大地提高代码的灵活性和可维护性。

标签:遍历,迭代,Iterator,list,模式,集合,public
From: https://www.cnblogs.com/20lxj666/p/18396279

相关文章

  • 解释器模式
    解释器模式解释器模式(InterpreterPattern)是一种行为设计模式,它定义了一种用于解释和执行语言或表达式的语法表示方法。该模式的主要目的是让语言的语法易于扩展和修改。解释器模式的结构解释器模式通常由以下几个部分组成:抽象表达式(AbstractExpression):定义一个解释操作的接......
  • 观察者模式
    观察者模式观察者模式(ObserverPattern)是一种设计模式,用于建立对象之间的一对多依赖关系。这种模式使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现事件处理系统或消息通知系统。在观察者模式中,有两个主要角色:被观察者(Subject......
  • 访问者模式
    访问者模式“访问者模式”通常是指软件开发中的一种设计模式,也叫做“Visitor模式”。它属于行为型设计模式之一,主要用于将数据结构和操作解耦。通过使用访问者模式,可以在不修改数据结构的前提下,定义新的操作。访问者模式的基本思想是:你有一个包含不同对象的对象结构(例如一个元素......
  • 模板方法模式
    模板方法模式模板方法模式(TemplateMethodPattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。模板方法模式的关键要素抽象类(AbstractClass......
  • 策略模式
    策略模式策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式允许算法在不影响客户端的情况下变化,从而提高了代码的灵活性和可维护性。策略模式的组成策略模式由以下几个部分组成:抽象策略(Strategy):这是一个接口或抽象......
  • 命令模式
    命令模式命令模式(CommandPattern)是行为型设计模式之一,它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,以及对请求排队或记录请求日志等操作。通过使用命令模式,命令的发出者与命令的执行者可以完全解耦。命令模式的结构Command(命令接口/抽象类):定义了执行命令......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。责任链模式的主要角色:抽象处理者(Handler):定......
  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......
  • 单列模式
    单列模式“单例模式(SingletonPattern),用于确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这个模式在需要控制资源的访问或者确保某些操作只有一个实例时使用。单例模式的特点唯一性:保证一个类只有一个实例。全局访问:提供一个全局的访问点来获取这个实例。延迟......
  • 23种设计模式
    23种设计模式设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:1.创建型模式1.1单例模式(Singleton)目的:确保一个类只有一个实例,并提供一个全局访问点。适用场......