디자인 패턴 ~Iterator~
12075 단어 객체 지향디자인 패턴신인 프로그래머 응원uml자바
1. 소개
GoF의 디자인 패턴에서 Iterator 패턴을 요약합니다.
2. Iterator 패턴이란?
3. 샘플 클래스 다이어그램
4. 샘플 프로그램
클래스(교실)에 학생을 넣어 학생의 이름을 차례로 표시하는 프로그램입니다.
4-1. Iterator 인터페이스
요소를 순차적으로 스캔하는 인터페이스입니다.
Iterator.java
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
4-2. Aggregate 인터페이스
Iterator를 만드는 인터페이스입니다. 샘플에서는 「집합체」라고 하고 있습니다.
Aggregate.java
public interface Aggregate {
public abstract Iterator iterator();
}
4-3. Student 클래스
집합체의 요소가 되는 클래스입니다. 샘플에서는 "학생"이라고 합니다.
Student.java
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
4-4. ClassRoom 클래스
Aggregate가 정한 인터페이스를 구현하는 클래스입니다. 샘플에서는 「교실」이라고 하고 있습니다.
ClassRoom.java
public class ClassRoom implements Aggregate {
private Student[] students;
private int last = 0;
public ClassRoom(int maxsize) {
this.students = new Student[maxsize];
}
public Student getStudentAt(int index) {
return students[index];
}
public void appendStudent(Student student) {
this.students[last] = student;
last++;
}
public int getLength() {
return last;
}
public Iterator iterator() {
return new ClassRoomIterator(this);
}
}
4-5. ClassRoomIterator 클래스
Iterator가 정한 인터페이스를 구현하는 클래스입니다.
ClassRoomIterator.java
public class ClassRoomIterator implements Iterator {
private ClassRoom classRoom;
private int index;
public ClassRoomIterator(ClassRoom classRoom) {
this.classRoom = classRoom;
this.index = 0;
}
public boolean hasNext() {
if (index < classRoom.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Student student = classRoom.getStudentAt(index);
index++;
return student;
}
}
4-6. Main 클래스
메인 처리를 실시하는 클래스입니다.
Main.java
public class Main {
public static void main(String[] args) {
ClassRoom classRoom = new ClassRoom(4);
classRoom.appendStudent(new Student("田中"));
classRoom.appendStudent(new Student("山田"));
classRoom.appendStudent(new Student("鈴木"));
classRoom.appendStudent(new Student("佐藤"));
Iterator iterator= classRoom.iterator();
while (iterator.hasNext()) {
Student student = (Student)iterator.next();
System.out.println(student.getName());
}
}
}
4-7. 실행 결과
田中
山田
鈴木
佐藤
5. 장점
Iterator 패턴의 장점은 구현과 분리되어 계산을 할 수 있다는 것입니다.
디자인 패턴은 클래스를 부품으로 사용할 수 있도록 하고, 재이용성을 촉진하는 것입니다.
샘플 프로그램의 Main 클래스에서 사용되고 있는 Iterator 메소드는, hasNext(), next()만이 됩니다. 즉, ClassRoom 클래스에 의존하지 않는 구현이 되어 있어, 배열의 사이즈등을 신경쓰지 않아서 좋아집니다.
6. GitHub
7. 디자인 패턴 목록
8. 참고
이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.
Reference
이 문제에 관하여(디자인 패턴 ~Iterator~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/i-tanaka730/items/7c178409a4d5c1e4e42b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)