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으로 작성되어 있다.

아래는 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에 따라서 분기를 시켜 놓앗당 ..
이로써 .. 회사에서 본 갓사수햄님의 코드를 부분적으로 카피해서 집에 가져다 놓을 수 있게 되었다.
자 이제 맥주를 마시자 !
