본문 바로가기

디자인 패턴/Java언어로 배우는 디자인패턴 입문 책 정리

iterator 패턴

반복하는 로직을 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