스트레티지 패턴

  • 전략 패턴은 각각의 알고리즘 군을 교환이 가능하도록 별도로 정의하고 각각 캡슐화 한 후 서로 교환해서 사용 할 수 있는 패턴,
  • 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환가능 하도록 하는 패턴

인터페이스

  • 기능에 대한 선언과 구현 분리
  • 기능을 사용 통로

장점

  • 코드 중복 방지
  • 런타임 시에 타겟 메소드 변경
  • 확장성 (신규클래스) 및 알고리즘 변경 용이

프로젝트 전체에서 변경이 일어나지 않는 부분에서 변경이 일어나는 부분을 찾아서 따로 캡슐화 한다.

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

+ Recent posts