设计模式---迭代器模式

本文介绍了迭代器模式的概念和应用,它提供了一种不暴露内部表示地访问集合对象元素的方法。在示例中,展示了如何创建一个CourseAggregate接口和CourseIterator接口,以及其实现,允许用户遍历Course对象的集合。在Test类中,演示了如何使用这些接口来遍历并打印课程名称。
摘要由CSDN通过智能技术生成

定义:
提供了一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示
行为型
适用场景:
访问一个集合对象的内容而无需暴露它的内部表示
为遍历不同的集合结构提供一个统一的接口
优点:
分离了集合对象的遍历行为
缺点:
类的个数成对增加
相关设计模式:
迭代器模式和访问者模式

Coding

public class Course {

    private String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public interface CourseAggregate {

    void add(Course course);

    void remove(Course course);

    CourseIterator getCourseIterator();

}
import java.util.ArrayList;
import java.util.List;

public class CourseAggregateImpl implements CourseAggregate {

    private List<Course> courses = new ArrayList<>();

    @Override
    public void add(Course course) {
        courses.add(course);
    }

    @Override
    public void remove(Course course) {
        courses.remove(course);
    }

    @Override
    public CourseIterator getCourseIterator() {
        return new CourseIteratorImpl(courses);
    }
}

public interface CourseIterator {

    boolean hasCourse();

    Course nextCourse();

}
import java.util.List;

public class CourseIteratorImpl implements CourseIterator {

    private List<Course> courseList;

    private int position;

    private Course course;

    public CourseIteratorImpl(List<Course> courseList) {
        this.courseList = courseList;
    }

    @Override
    public boolean hasCourse() {
        return position < courseList.size();
    }

    @Override
    public Course nextCourse() {
        return courseList.get(position++);
    }
}

public class Test {

    public static void main(String[] args) {
        CourseAggregate courseAggregate = new CourseAggregateImpl();
        courseAggregate.add(new Course("1-Course"));
        courseAggregate.add(new Course("2-Course"));
        courseAggregate.add(new Course("3-Course"));
        courseAggregate.add(new Course("4-Course"));
        courseAggregate.add(new Course("5-Course"));
        CourseIterator courseIterator = courseAggregate.getCourseIterator();
        while (courseIterator.hasCourse()) {
            System.out.println(courseIterator.nextCourse().getName());
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值