[Java] 전략패턴
설명이 부족할 수 있습니다
전략패턴이란?
전략 패턴은 자바의 다형성을 이용해 클라이언트(클래스)가 컨텍스트(인터페이스)를 통해 전략(구현체)를 바꿔가면서 쓰게 하는 개발 방식이다.
아래의 그림을 보면 이해가 쉬울 것이다.
SomeClass 가 Strategy 타입의 변수로 구현체인 StrategyA, StrategyB 를 참조할 수 있게 된다. SomeClass 는 필요에 따라 StrategyA 나 StrategyB 를 바꿔가며 쓸 수 있다.
리그오브레전드 ⚔
전략 패턴을 이용해 롤 챔피언들을 바꿔가며 써보겠다.
나의 주 챔이었던 오공, 베인, 이즈리얼을 구현해보자.
Champion 이라는 인터페이스와
Wukong, Vayne, Ezreal 이라는 구현체를 만들고
LOL에서 Champoin 의 전략(구현체) 를 바꿔가면서 써보자.
Champion interface
public interface Champion {
void Q();
void W();
void E();
void R();
}
Wukong class
public class Wukong implements Champion{
@Override
public void Q() {
System.out.println("파쇄격");
}
@Override
public void W() {
System.out.println("분신 전사");
}
@Override
public void E() {
System.out.println("근두운 급습");
}
@Override
public void R() {
System.out.println("회전격");
}
}
Vayne class
public class Vayne implements Champion{
@Override
public void Q() {
System.out.println("구르기");
}
@Override
public void W() {
System.out.println("은화살");
}
@Override
public void E() {
System.out.println("선고");
}
@Override
public void R() {
System.out.println("결전의 시간");
}
}
Ezreal class
public class Ezreal implements Champion{
@Override
public void Q() {
System.out.println("신비한 화살");
}
@Override
public void W() {
System.out.println("정수의 흐름");
}
@Override
public void E() {
System.out.println("비전 이동");
}
@Override
public void R() {
System.out.println("정조준 일격");
}
}
LOL class
public class LOL {
public static void main(String[] args) {
//오공 QWER
Champion champ = new Wukong();
champ.Q();
champ.W();
champ.E();
champ.R();
//결과)
//파쇄격
//분신 전사
//근두운 급습
//회전격
}
}
다른 챔피언을 쓰고싶다면 new Wukong() 부분만 다른 구현체로 바꾸면 된다.
이렇게 공통적인 부분을 뽑아내 인터페이스로 일반화한다음
다형성을 이용해 필요할때 전략을 쉽게 바꿀 수 있다.
Author And Source
이 문제에 관하여([Java] 전략패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cksdnr066/Java-전략패턴저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)