百度網(wǎng)盟推廣怎么做網(wǎng)絡(luò)優(yōu)化的內(nèi)容包括哪些
6.8 迭代器模式
6.8.1 概述
定義:提供一個(gè)對(duì)象來(lái)順序訪問(wèn)聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。
6.8.2 結(jié)構(gòu)
迭代器模式主要包含以下角色:
- 抽象聚合(Aggregate)角色:定義存儲(chǔ)、添加、刪除聚合元素以及創(chuàng)建迭代器對(duì)象的接口。
- 具體聚合(ConcreteAggregate)角色:實(shí)現(xiàn)抽象聚合類,返回一個(gè)具體迭代器的實(shí)例。
- 抽象迭代器(Iterator)角色:定義訪問(wèn)和遍歷聚合元素的接口,通常包含 hasNext()、next() 等方法。
- 具體迭代器(Concretelterator)角色:實(shí)現(xiàn)抽象迭代器接口中所定義的方法,完成對(duì)聚合對(duì)象的遍歷,記錄遍歷的當(dāng)前位置。
6.8.3 案例實(shí)現(xiàn)
【例】定義一個(gè)可以存儲(chǔ)學(xué)生對(duì)象的容器對(duì)象,將遍歷該容器的功能交由迭代器實(shí)現(xiàn),涉及到的類如下:
代碼如下:
定義迭代器接口,聲明hasNext、next方法
class Student {private String name;private String number;public Student(String name, String number) {this.name = name;this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", number='" + number + '\'' +'}';}
}
//抽象迭代器角色接口
interface StudentIterator {boolean hasNext();Student next();
}
//具體迭代器角色類
class StudentIteratorImpl implements StudentIterator {private List<Student> list;private int position = 0;public StudentIteratorImpl(List<Student> list) {this.list = list;}@Overridepublic boolean hasNext() {return position < list.size();}@Overridepublic Student next() {Student currentStudent = list.get(position);position++;return currentStudent;}
}
interface StudentAggregate {void addStudent(Student student);void removeStudent(Student student);StudentIterator getStudentIterator();
}
class StudentAggregateImpl implements StudentAggregate {private List<Student> list = new ArrayList<Student>(); // 學(xué)生列表@Overridepublic void addStudent(Student student) {this.list.add(student);}@Overridepublic void removeStudent(Student student) {this.list.remove(student);}@Overridepublic StudentIterator getStudentIterator() {return new StudentIteratorImpl(list);}
}
class Client{public static void main(String[] args) {//創(chuàng)建聚合對(duì)象StudentAggregateImpl studentAggregate = new StudentAggregateImpl();//添加元素studentAggregate.addStudent(new Student("張三","1001001"));studentAggregate.addStudent(new Student("李四","1001002"));studentAggregate.addStudent(new Student("王二","1001003"));studentAggregate.addStudent(new Student("麻子","1001004"));//遍歷聚合對(duì)象StudentIterator studentIterator = studentAggregate.getStudentIterator();while(studentIterator.hasNext()){Student student = studentIterator.next();System.out.println(student.toString());}}
}
Student{name='張三', number='1001001'}
Student{name='李四', numbe