728x90
😀전략패턴이란?
객체의 행위를 동적으로 바꾸고 싶은 경우, 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말한다.
객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴.
메서드내의 기능구현을 수정하고 싶을 때, 직접 그 코드에 찾아가 수정하게 된다면, 그 메서드를 사용하는 다른 코드들에게 영향을 끼치게 된다. 이는 SOLID의 원칙 중, OCP(Open-Closed Principle)에 위배됨!!
이러한 문제점을 해결하기 위한 패턴이 "전략패턴"이다.
😀코드로 알아보기!!
Moving.java
package study.strategyPattern.code0;
public class Moving {
private MovableStrategy movableStrategy;
public Moving(MovableStrategy movableStrategy){
this.movableStrategy = movableStrategy;
move();
}
public void move(){
movableStrategy.move();
}
}
Bus.java
package study.strategyPattern.code0;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Bus extends Moving{
public Bus(MovableStrategy movableStrategy) {
super(movableStrategy);
transportation();
}
void transportation(){
log.info("이동수단은 Bus 입니다.");
}
}
MovableStrategy.java
package study.strategyPattern.code0;
public interface MovableStrategy {
void move();
}
LoadStrategy.java
package study.strategyPattern.code0;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoadStrategy implements MovableStrategy{
@Override
public void move() {
log.info("도로를 통해 이동");
}
}
RailLoadStrategy.java
package study.strategyPattern.code0;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class RailLoadStrategy implements MovableStrategy{
@Override
public void move() {
log.info("선로를 통해 이동");
}
}
StrategyPatternTest.java
package study.strategyPattern;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.strategyPattern.code0.Bus;
import study.strategyPattern.code0.LoadStrategy;
import study.strategyPattern.code0.Moving;
import study.strategyPattern.code0.RailLoadStrategy;
@Slf4j
public class StrategyPatternTest {
@Test
void code0test(){
log.info("bus1의 이동수단을 도로로 설정");
Moving bus1 = new Bus(new LoadStrategy());
log.info("=============================");
log.info("bus1의 이동수단을 선로로 변경하고 싶을 때, 내부 코드 변경 없이 한 코드만 수정하여 변경가능");
Moving bus2 = new Bus(new RailLoadStrategy());
log.info("=============================");
}
}
'DESIGN PATTERN' 카테고리의 다른 글
[디자인패턴] 추상 팩토리 패턴 (abstract Factory Pattern) 이란? - 개발자 배찌 (0) | 2022.04.13 |
---|---|
[디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 이란? - 개발자 배찌 (0) | 2022.04.12 |
[디자인패턴] 어댑터 패턴(Adapter Pattern)이란? - 개발자 배찌 (0) | 2022.04.11 |
[디자인패턴] 책임 연쇄 패턴 (Chai- of-responsibility Pattern) - 개발자 배찌 (0) | 2022.04.11 |
[디자인패턴] 브릿지패턴(Bridge Pattern) 이란? - 개발자 배찌 (0) | 2022.04.07 |