특정 상황에서 사용해야 할 알고리즘이 여러개이고, 런타임 도중에 계속 변경해야 하는 경우에 사용하는 패턴
아래 카카오맵을 사용한다고 생각해봅시다. 경로를 찾기를 할 때, 자동차/버스/도보/자전거 총 4가지 방식을 제공!
⇒ 각 방식마다 경로를 산출하는 알고리즘이 다 다르지만, 경로를 찾는다는 공통적은 기능을 수행합니다!
우리는 동일한 목적으로 하는 경로찾기를 → 인터페이스
그리고 경로를 산출하는 알고리즘을 → 각각 객체로 캡슐화
그리고 각각의 교통수단을 누를 때 ⇒ 클라이언트 객체에 독립적으로 구성했기 때문에 ⇒ 느슨한 연결을 구현 가능!
느슨한 연결을 하면 ⇒ 클라이언트 객체가 알고리즘이 변하게 될 때, 영향을 받지 않게 된다는 것
Concrete Strategy 객체로 구성 → Strategy 객체에 대한 참조를 유지한다 → Strategy가 데이터에 접근 할 수 있는 인터페이스를 정의합니다.
// Context
class Navigation {
private var routeAlgorithm: Strategy?
func execute() {
self.routeAlgorithm?.algorithmExecute()
}
func setStrategy(strategy: Strategy) {
self.routeAlgorithm = strategy
}
}