Java/Design Pattern

[디자인 패턴] Strategy Pattern(전략 패턴, 스트레티지 패턴)

hyerann 2020. 7. 20. 22:32

Strategy Pattern

전략 바꾸기

학습 목표

  • 인터페이스 개념을 이해한다.
  • 델리게이트 개념을 이해한다.
  • 전략 패턴 개념을 이해한다.

인터페이스

키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치

  • 기능에 대한 선언과 구현 분리
  • 기능을 사용 통로

델리게이트

  • 위임하다

스트레티지 패턴

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

기본 설계

요구 사항

  • 신작 게임에서 캐릭터와 무기를 구현해보세요.
  • 무기는 두 가지 종류가 있습니다.

유지 보수 요청

  • 무기 중에 도끼를 추가해주세요

Class Diagram

 

Weapon.class

public interface Weapon {

    public void attack();

}

 

Knife.class

public class Knife implements Weapon {

    @Override
    public void attack() {
        System.out.println("칼 공격");
    }
}

 

Sword.class

public class Sword implements Weapon {

    @Override
    public void attack() {
        System.out.println("검 공격");
    }
}

 

Ax.class

public class Ax implements Weapon {

    @Override
    public void attack() {
        System.out.println("도끼 공격");
    }
}

 

GameCharacter.class

public class GameCharacter {

    //접근점
    private Weapon weapon;

    //교환 가능
    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public void attack() {
        if (weapon == null) {
            System.out.println("맨손 공격");
        } else {
            //델리게이트
            weapon.attack();
        }
    }
}

 

Main.class

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();
    }
}