전략 패턴 (Strategy Pattern)
인터페이스란..
사전적 정의
- 키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치
컴퓨터 언어에서의 정의
- 기능에 대한 선언과 구현 분리
- 기능을 사용하는 통로
A 라는 기능이 있고, 이를 인터페이스를 통해 구현한다고 했을 때, 인터페이스는 아래와 같다.
public interface Ainterface {
//기능의 선언
public void funcA();
}
구현은 Class에서 A Interface를 implements
로 받아서 구현할 수 있다.
public class AinterfaceImpl implements Ainterface {
@Override
public void funcA() {
System.out.println("AAA");
}
}
델리게이트(Delegate)란..
인터페이스: 기능을 기능의 선언과 기능의 구현을 분리할 수 있는 기능을 제공한다. 또한 어떤 기능을 호출하는 통로의
델리게이트: 특정 객체의 기능을 사용하기 위해, 다를 객체의 기능을 호출하는 것
전략 패턴이란..?
- 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근점에서 서로 교환 가능하도록 하는 패턴.
일반적인 전략 패턴 설계
전략패턴의 예
(게임에서 캐릭터와 무기의 예)
요구 사항
- 신작 게임에서 캐릭터와 무기를 구현하시오
- 무기는 두 가지 종류가 있다
public interface Weapon {
public void attack();
}
public class Knife implements Weapon {
@Override
public void attack() {
System.out.println("칼 공격");
}
}
public class Sword implements Weapon {
@Override
public void attack() {
System.out.println("검 공격");
}
}
public class Ax implements Weapon {
@Override
public void attack() {
System.out.println("도끼 공격");
}
}
pubic class GameCharacter {
// 접근점
private Weapon weapon;
// 교환 가능
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void attack() {
if (weapon == null) {
System.out.prinlnt("맨손 공격");
}
// 델리게이트 (내가 어떤 것을 들고 있는지에 따라서 공격 형태가 바뀐다, Weapon이 알아서 할 것이다)
weapon.attack();
}
}
public class Main {
public static void main(String[] args) {
GameCharacter character = new GameCharacter();
character.attack();
character.setWeapon(new Knife());
character.attack();
character.setWeapon(new Sword());
character.attack();
character.setWeapon(new Ax());
character.attack();
}
}