전략 패턴 (Strategy Pattern)

728x90

전략 패턴 (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)란..

  • 위임하다

인터페이스: 기능을 기능의 선언과 기능의 구현을 분리할 수 있는 기능을 제공한다. 또한 어떤 기능을 호출하는 통로의
델리게이트: 특정 객체의 기능을 사용하기 위해, 다를 객체의 기능을 호출하는 것

전략 패턴이란..?

  • 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근점에서 서로 교환 가능하도록 하는 패턴.

일반적인 전략 패턴 설계

image

전략패턴의 예

(게임에서 캐릭터와 무기의 예)

요구 사항

  • 신작 게임에서 캐릭터와 무기를 구현하시오
  • 무기는 두 가지 종류가 있다
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();
    }
}
728x90

'디자인 패턴' 카테고리의 다른 글

3. 브릿지 패턴 (Bridge Pattern)  (0) 2020.04.25
2. 어댑터 패턴 (Adapter Pattern)  (0) 2020.04.24
1. 전략(Strategy) 패턴  (0) 2020.04.18