본문 바로가기
Spring/DesighPattern

GOF패턴 - Strategy Pattern(행동)

by windy7271 2023. 2. 21.
728x90
반응형

 

1. 스트래티지 패턴 : 여러가지 알고리즘의 추상적인 접근점을(interface) 만들어 그 접근점을 서로 교환할 수 있도록 하는 패턴

 

 

즉 구현체 여러개면 아무거나 하나 골라서 실행한다는것

예를 들면 캐릭터가 (칼,맨손,주먹) 을 든다 에서 칼,맨손,주먹중 하나를 고를 수 있다는것

 

인터페이스 : 기능에 대한 선언구현 분리 , 기능을 사용 통로

델리게이트 :  위임한다. 다른 객체의 기능을 빌려 사용하는것, 

 

이 전략을 사용하는 이유는 변경에는 닫혀있고 확장에는 열려있기 때문

디자인 문제를 해결하는 방법, 즉 객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다.

 

context 에서  사용할 알고리즘을 클라이언트가 선택한다

 

예시 

 

게임 캐릭터가 weapon 이라는 전력을 가지고있는다.

weapon 을 통해서 무기를 고를수 있다.

package Strategy;

public class GameCharaceter {
    // 접근점 만들어줌
    private Weapon weapon;

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

    public void attack() {
        if (weapon == null){
            System.out.println("x");
        }
        else{
            weapon.attack();
        }

    }
}

 

 

전략을 가지고 있는다. (접근점 )

// 접근점
public interface Weapon {

    public void attack(); // knife, sword

 

package Strategy;
public class Sword implements Weapon{

    @Override
    public void attack() {
        System.out.println("sword attack");
    }
}



package Strategy;
public class knife implements Weapon{

    @Override
    public void attack() {
        System.out.println("knife attack");
    }
}

전략에서 사용할 무기들 칼, 검

 

package Strategy;

import java.awt.image.Kernel;

public class Main {
    public static void main(String[] args) {


        GameCharaceter characeter = new GameCharaceter();

        characeter.attack();

        characeter.setWeapon(new knife());
        characeter.attack();

        characeter.setWeapon(new Sword());
        characeter.attack();
    }
}

 

x
knife attack
sword attack

 

반응형

댓글