-
[Design Pattern] Strategy PatternProgramming/DesignPattern 2020. 12. 10. 16:40
Strategy Pattern (스트래티지 패턴)
알고리즘 변화를 캡슐화로 처리
스트래티지 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 여기에서 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야할 필요가 있는 경우가 많이 발생한다.
특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을때 스트래티지 패턴은 매우 유용하다.
같은 문제를 해결하는 여러 알고리즘이 클래스 별로 캡슐화되어 있고, 이들이 필요할 때 교체할 수 있도록함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴이다.
클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에게 주입하는 패턴이다
- Strategy : 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다.
- ConcreteStrategy1, ConcreteStrategy2, ConcreteStrategy3 : 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스다.
- Context: 스트래티지 패턴을 이용하는 역할을 수행한다. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메소드를 제공한다.
1. 클라이언트가 원하는 Strategy 객체를 생성하고, 이를 Context 객체에 바인딩하면
2. Context 객체는 바인딩된 Strategy 객체의 타입에 따라 적절한 행위를 실행한다.
Robot, Atom, TeakwonV는 Context 역할을 한다.
MovingStrategy와 AttackStrategy는 각각 Strategy 역할을 한다.
WalkingStrategy, FlyingStrategy, PunchStrategy, MissileStrategy 클래스는 ConcreteStrategy 역할을 한다.
● Context - 실제 각각의 알고리즘에 대한 인스턴스를 가짐
● Interface - 각각의 알고리즘이 가져야 할 공통인터페이스 정의
● Algorithm1,Algorithm2 - 실제 인터페이스 구현. 각각의 알고리즘을 프로그래밍
안드로이드에서 활용한 Strategy Pattern 적용 사례. 필터
medium.com/android-dev-hacks/strategy-design-pattern-android-real-life-example-a055bb0353b3
Strategy Design Pattern | Android real-life example
Strategy Design Pattern: is a type of behavioral design pattern that encapsulates a “family” of algorithms and selects one from the podol…
medium.com
medium.com/@nsaveek/2-practical-example-of-state-and-strategy-design-pattern-android-874de1fba0d
recyclerview item에 적용
2 . Practical example of State and Strategy Design Pattern (Android)
A brief introduction to Strategy design pattern with example
medium.com
'Programming > DesignPattern' 카테고리의 다른 글
[Design Pattern] Observer Pattern (0) 2020.12.26 [Design Pattern] Command Pattern (0) 2020.12.17 [Design Pattern] State Pattern (0) 2020.12.15 [Design Pattern] Singleton Pattern (1) 2020.12.14