스트레티지 패턴
- 전략 패턴은 각각의 알고리즘 군을 교환이 가능하도록 별도로 정의하고 각각 캡슐화 한 후 서로 교환해서 사용 할 수 있는 패턴,
- 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환가능 하도록 하는 패턴
인터페이스
- 기능에 대한 선언과 구현 분리
- 기능을 사용 통로
장점
- 코드 중복 방지
- 런타임 시에 타겟 메소드 변경
- 확장성 (신규클래스) 및 알고리즘 변경 용이
프로젝트 전체에서 변경이 일어나지 않는 부분에서 변경이 일어나는 부분을 찾아서 따로 캡슐화 한다.
package stragegy;
public interface CarMoveBehavior {
public void action();
}
class UpBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("up!");
}
}
class DownBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Down!");
}
}
class LeftBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Left!");
}
}
class RightBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Right!");
}
}
public class Car {
private CarMoveBehavior carMoveBehavior;
public Car(CarMoveBehavior carMoveBehavior){
this.carMoveBehavior = carMoveBehavior;
}
public void move(){
carMoveBehavior.action();
}
public void setMoveBehavior(CarMoveBehavior carMoveBehavior){
this.carMoveBehavior = carMoveBehavior;
}
}
Main.java
public class Main{
public static void main(String[] args){
Car car1 = new Car(new UpBehavior());
car1.move();
Car car2 = new Car( new DownBehavior());
car2.move();
Car car3 = new Car( new LeftBehavior());
car3.move();
Car car4 = new Car( new RightBehavior());
car4.move();
}
}
인터페이스라는 공통적인 기능들을 선언해두고 그것들을 캡슐화하여 인터페이스의 기능을 구현하는 방법 !!
참고 : https://niceman.tistory.com/133?category=940951
참고 : https://www.youtube.com/watch?v=UEjsbd3IZvA&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY&index=2&t=0s