전략 패턴 ( Strategy Pattern)
= 정책 패턴 ( Policy Pattern )
객체가 행할 수 있는 것들을 전략으로 구성해놓고 사용한다.
행위를 직접 수정하지 않고, 전략으로 구성해놓은 ( = 캡슐화한 알고리즘 ) 전략 패턴만 수정하면 된다.
다음은 슈퍼 마리오를 통한 간단한 전략 패턴의 한 예시이다.
package strategy;
interface JumpStrategy {
void jump();
}
class Jump implements JumpStrategy {
@Override
public void jump() {
System.out.println("조금 높게 점프합니다.");
}
}
class DoubleJump implements JumpStrategy {
@Override
public void jump() {
System.out.println("매우 높게 점프합니다.");
}
}
interface ChangeStrategy {
void change();
}
class BeSmaller implements ChangeStrategy {
@Override
public void change() {
System.out.println("몸집이 지금보다 작아집니다.");
}
}
class BeBigger implements ChangeStrategy {
@Override
public void change() {
System.out.println("몸집이 지금보다 커집니다.");
}
}
class SuperMario {
private JumpStrategy jumpStrategy;
private ChangeStrategy changeStrategy;
public SuperMario(JumpStrategy jumpStrategy, ChangeStrategy changeStrategy) {
this.jumpStrategy = jumpStrategy;
this.changeStrategy = changeStrategy;
}
public void jump() {
jumpStrategy.jump();
}
public void change() {
changeStrategy.change();
}
}
public class StrategyTest {
public static void main(String[] args) {
SuperMario superMario = new SuperMario(new DoubleJump(), new BeBigger());
superMario.jump();
superMario.change();
}
}
점프 전략과 변화 전략의 인터페이스를 각각 만들었다.
그리고, 각각의 전략에 대해 일어날 수 있는 경우의 전략들을 구현하였다.
행위 수정 시에 전략 부분만 수정하면 되기에 수정에 용이한 장점이 있다.
'Develop' 카테고리의 다른 글
컴퓨터와 프로그래밍 (0) | 2022.08.22 |
---|---|
Verification 과 Validation (0) | 2022.08.18 |
Reverse&Forward Engineer (0) | 2022.07.28 |
Naming Convention (0) | 2022.07.26 |
라이브러리 / 프레임워크 (0) | 2022.07.25 |