一、迭代器模式介紹
1、定義與型別
定義:提供一種方法,順序訪問一個集合物件中的各個元素,而又不暴露該物件的內部表示
型別:行為型
2、適用場景
訪問一個集合物件的內容而無需暴露它的內部表示
為遍歷不同的集合結構提供一個統一的介面
3、優點
分離了集合物件的遍歷行為
4、缺點
類的個數成對增加
5、相關設計模式
迭代器模式和訪問者模式
這兩者都是迭代的訪問一個集合中的各個元素,不同的是在訪問者模式當中,開放的部分作用于物件的操作上,而在迭代器模式中,擴展開放的部分是在集合物件的種類上,實作方式上也會有很大的區別,
二、代碼示例
課程物體類:
public class Course {
private String name;
public Course(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
迭代器介面:
public interface CourseIterator {
Course nextCourse();
boolean isLastCourse();
}
迭代器類:
public class CourseIteratorImpl implements CourseIterator {
private List courseList;
private int position;
private Course course;
public CourseIteratorImpl(List courseList){
this.courseList=courseList;
}
@Override
public Course nextCourse() {
System.out.println("回傳課程,位置是: "+position);
course=(Course)courseList.get(position);
position++;
return course;
}
@Override
public boolean isLastCourse(){
if(position< courseList.size()){
return false;
}
return true;
}
}
聚合類介面:
public interface CourseAggregate {
void addCourse(Course course);
void removeCourse(Course course);
CourseIterator getCourseIterator();
}
聚合類:
public class CourseAggregateImpl implements CourseAggregate {
private List courseList;
public CourseAggregateImpl() {
this.courseList = new ArrayList();
}
@Override
public void addCourse(Course course) {
courseList.add(course);
}
@Override
public void removeCourse(Course course) {
courseList.remove(course);
}
@Override
public CourseIterator getCourseIterator() {
return new CourseIteratorImpl(courseList);
}
}
測驗類:
public class Test {
public static void main(String[] args) {
Course course1 = new Course("Java電商一期");
Course course2 = new Course("Java電商二期");
Course course3 = new Course("Java設計模式精講");
Course course4 = new Course("Python課程");
Course course5 = new Course("演算法課程");
Course course6 = new Course("前端課程");
CourseAggregate courseAggregate = new CourseAggregateImpl();
courseAggregate.addCourse(course1);
courseAggregate.addCourse(course2);
courseAggregate.addCourse(course3);
courseAggregate.addCourse(course4);
courseAggregate.addCourse(course5);
courseAggregate.addCourse(course6);
System.out.println("-----課程串列-----");
printCourses(courseAggregate);
courseAggregate.removeCourse(course4);
courseAggregate.removeCourse(course5);
System.out.println("-----洗掉操作之后的課程串列-----");
printCourses(courseAggregate);
}
public static void printCourses(CourseAggregate courseAggregate){
CourseIterator courseIterator= courseAggregate.getCourseIterator();
while(!courseIterator.isLastCourse()){
Course course=courseIterator.nextCourse();
System.out.println(course.getName());
}
}
}
三、 原始碼示例
1、JDK


2、mybatis中的DefaultCursor

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/6008.html
標籤:設計模式
上一篇:模板方法模式
下一篇:建造者模式
