JAVA

[JAVA] 전략패턴

집한구석 2021. 11. 29. 21:43
728x90

정의

  • 행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 바꿀수 있게 해주는 패턴
  • 객체들이 할 수 있는 행위를 각각 전략으로 만들어, 동적으로 전략을 바꿔 행위를 수정하는 패턴
  • 기존코드의 변경없이 실제 로직 변경을 할 수있는 패턴
  • GoF 디자인 패턴의 분류 중 행위패턴에 해당함

사용하는 용도

  • 클래스들의 동작이 다른 경우
  • 로직 변경이 필요할 때 사용

예시

public interface Skill {
  void use();
}


public class Sett {

  private Skill skill;

  public void useSkill() {
    skill.use();
  }

  public void setSkill(Skill skill) {
    this.skill = skill;
  }
}

public class Haymaker implements Skill {

  @Override
  public void use() {
    System.out.println("강펀치 !");
  }
}

public class Facebreaker implements Skill {

  @Override
  public void use() {
      System.out.println("안면강타 !");
  }
}

public class KunckleDown implements Skill {

  @Override
  public void use() {
    System.out.println("주먹다짐 !");
  }
}

public class StrategySample {

  public static void main(String[] args) {
    Sett sett = new Sett();
    sett.setSkill(new Haymaker());
    sett.useSkill();

    sett.setSkill(new Facebreaker());
    sett.useSkill();
  }
}

특징

  • 유지보수가 하기가 편함
  • SOLID의 원칙중 OCP(Open-Closed Principle) 위배 되는 상황을 보완해줌 

'JAVA' 카테고리의 다른 글

[JAVA] ThreadLocal  (0) 2021.12.03
[JAVA] 템플릿 메소드 패턴  (0) 2021.11.29
[JAVA] TreeMap  (0) 2021.11.08
[JAVA] Junit5  (0) 2021.10.13
[JAVA] DBCP (DB Connection Pool)  (0) 2021.07.18