Back-end/Java, Kotlin

[디자인 패턴] Strategy (ft. 오바와치)

philo0407 2021. 3. 27. 13:19

회사에서 !!

갓사수의 Strategy 패턴을 보고 feel을 받은 나는

오버워치의 에코 영웅을 대상으로 전략 패턴을 작성해 보았다.

 

오버워치의 4번째 옴닉 영웅인 에코는 자신을 상대 영웅으로 복사하여 전투에 임할 수 있다.

 

난 에코, 동충하초임

 

public interface Echo {

  public void attack();

  public OverwarchHeros getSymbol();

}

에코 인터페이스는 공격과 심볼을 표시할 수 있다.

 

public enum OverwarchHeros {
  H01("Soldier76"), H02("Reinhardt"), H03("Tracer");

  private String name;

  OverwarchHeros(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

 

심볼은 위와 같은 enum으로 작성되어 있다.

 

 

프로젝트 구조 4개나 잇다능

 

아래는 Echo를 상속 받은 각 구현체 클라쓰들이다.

 

public class Soldier76 implements Echo {

  @Override
  public void attack() {
    System.out.println("솔져76: 펄스소총 두두두둗루 !! 돼지고기 두루치기 마이쪙!");
  }

  @Override
  public OverwarchHeros getSymbol() {
    return OverwarchHeros.H01;
  }
}

 

public class Reinhardt implements Echo {

  @Override
  public void attack() {
    System.out.println("라인하르트: 로캣해머 수우웅ㅇ");
  }

  @Override
  public OverwarchHeros getSymbol() {
    return OverwarchHeros.H02;
  }
}

 

public class Tracer implements Echo {

  @Override
  public void attack() {
    System.out.println("트레이서: 펄스 쌍권총 피퓨부부부");
  }

  @Override
  public OverwarchHeros getSymbol() {
    return OverwarchHeros.H03;
  }
}

 

Main함수다 !

public class Main {

  public static void main(String[] args) {
//    Echo echo = new Soldier76();
    List<Echo> echos
        = new ArrayList<>(Arrays.asList(new Soldier76(), new Reinhardt(), new Tracer()));

    for (Echo echo : echos) {
      switch (echo.getSymbol()) {
        case H01:
          out.print("첫 번째 영웅 : ");
          break;
        case H02:
          out.print("두 번째 영웅 : ");
          break;
        case H03:
          out.print("세 번째 영웅 : ");
          break;
      }
      out.println(echo.getSymbol().getName());
      echo.attack();
      out.println(); // just LF
    }
  }
}

case 문을 통해서 enum에 따라서 분기를 시켜 놓앗당 ..

 

이로써 .. 회사에서 본 갓사수햄님의 코드를 부분적으로 카피해서 집에 가져다 놓을 수 있게 되었다.

 

자 이제 맥주를 마시자 !

 

맥뜌