반복하는 로직을 for문이 아닌 method를 이용해 구현하는 패턴
1. 예제 코드
MyClass : 반복을 돌려야하는 class
public class MyClass {
private List<String> sentents;
public List<String> getSentents() {return sentents;}
public void setSentents(List<String> sentents) {this.sentents = sentents;}
public String getSentent(int idx) {return sentents.get(idx);}
public void appned(String str) {
if (sentents == null) {
sentents = new ArrayList();
}
sentents.add(str);
}
public MyClassIterator iterator() {
return new MyClassIterator(this);
}
}
MyClassIterator : MyClass에서 반복 역할
public class MyClassIterator {
private MyClass myClass;
private int idx;
public MyClassIterator(MyClass myClass) {
this.myClass = myClass;
this.idx = 0;
}
public boolean hasNext() {
return myClass.getSentents().size() > idx;
}
public String next() {
String str = myClass.getSentent(idx);
idx++;
return str;
}
}
Main : Test코드
public class Main {
public static void main(String args[]) {
MyClass a = new MyClass();
a.appned("a");
a.appned("b");
MyClassIterator it = a.iterator();
while(it.hasNext()) {
String str = it.next();
System.out.println(str);
}
}
}
2. 특징
반복하는 객체의 형태가 변경이 되어도 반복문의 수정은 필요가 없다.
ex. while(it.hasNext()) {...} 형태에서 it의 반복 대상이 array -> vector로 변경이 되어도 while문에서의 수정은 없어도 된다.
3. 해당 패턴을 고려할만한 상황
- 반복의 흐름이 일반적이지 않고, 해당 반복 로직이 여러 곳에서 사용될 때
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Prototpye 패턴 (0) | 2021.01.03 |
---|---|
Singleton 패턴 (0) | 2021.01.01 |
Factory Method 패턴 (410) | 2020.12.31 |
Template Method 패턴 (1) | 2020.12.27 |
Adapter 패턴 (0) | 2020.12.27 |