[디자인패턴] Strategy Pattern(전략 바꾸기)

김나우·2022년 8월 30일
0

디자인패턴

목록 보기
1/1

출처 : 이야기'sG님 유튜브


스트레티지 패턴

여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서

서로 교환 가능하도록 하는 패턴.


기본 설계


인터페이스란?

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

  • 기능에 대한 선언과 구현 분리

  • 기능을 사용하는 통로

public interface Ainterface {

    //기능에 선언
    public void funcA();
}

public class AinterfaceImpl implements Ainterface{

    @Override
    public void funcA() {
        System.out.println("AAA");
    }
} 

A인터페이스에 기능을 선언하고 그 기능을 구현하는 클래스를 만들어서 구현을 해줌.

public class Main {

    public static void main(String[] args) {
        System.out.println("hello");

        Ainterface ainterface = new AinterfaceImpl();
        //통로
        ainterface.funcA();

        AObject aObject = new AObject();
        aObject.funcAA();
    }
}

main 클래스에서 사용할 수 있다


델리게이트

  • 위임하다(떠넘기다)

  • 특정 객체의 기능을 사용하기 위해 다른 객체의 기능을 호출하는 것.

public class AObject {

    Ainterface ainterface;

    public AObject() {
        ainterface = new AinterfaceImpl();
    }

    public void funcAA() {

        //다른 객체 기능을 빌려서 사용 하는 것 : 위임한다
        ainterface.funcA();
        ainterface.funcA();

        //System.out.println("AAA");
        //System.out.println("AAA");

        // ~ 기능이 필요합니다. 개발해주세요
    }
}

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("도끼 공격");
    }
}

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

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

    }
}
profile
안녕하세요

0개의 댓글