본문 바로가기

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

strategy 패턴

알고리즘 부분을 분리하여 다양한 알고리즘 방식으로 교체를 용이하게 하는 패턴


1. 코드

Strategy: 알고리즘 부분 클래스의 인터페이스 (1~3 중 하나 뽑는 알고리즘)

public interface Strategy {
	public int getNext();
}

 

RandomStrategy: 알고리즘 클래스1 (랜덤 추출)

public class RandomStrategy implements Strategy {

	@Override
	public int getNext() {
		Random random = new Random();
		return random.nextInt(3);
	}
}

 

SequentialStrategy: 알고리즘 클래스2 (순차적 추출)

public class SequentialStrategy implements Strategy {

	private int value = 0;
	
	@Override
	public int getNext() {
		return (value++) % 3;
	}
}

 

ThreeCount: 알고리즘을 사용하는 class

public class ThreeCount {
	private Strategy strategy;
	
	public ThreeCount(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void printNextNum() {
		System.out.println(strategy.getNext());
	}
}

 

Main : Test클래스

public class Main {

	public static void main(String[] args) {
		ThreeCount randomCount = new ThreeCount(new RandomStrategy());
		for(int i=0; i<3; i++) {
			randomCount.printNextNum();
		}
		
		ThreeCount sequentialCount = new ThreeCount(new SequentialStrategy());
		for(int i=0; i<3; i++) {
			sequentialCount.printNextNum();
		}
	}
}

 

2. 특징

- 알고리즘의 교체가 용이함

- 알고리즘에 해당하는 객체와 알고리즘을 사용하는 객체를 위임 방식으로 연결했음

- 새로운 알고리즘을 사용할 때 알고리즘을 사용하는 객체의 수정은 없어도 됨

 

3. 해당 패턴을 고려해볼만한 상황

- 다양한 알고리즘을 사용해야 하는 경우

- 계속해서 알고리즘의 개선이 예상되는 경우

- 복잡한 알고리즘을 사용해야 하는 경우

 

'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글

Decorator 패턴  (0) 2021.01.30
Composite 패턴  (0) 2021.01.24
Bridge 패턴  (0) 2021.01.17
Abstract Factory 패턴  (0) 2021.01.16
Builder 패턴  (0) 2021.01.09