[자바 디자인 패턴] 행동패턴 - 전략 패턴

2021. 3. 15. 17:33 JAVA/Design Patterns

행동패턴 목록

 

클래스의 수를 상관하지 않고 단위기능의 처리를 테스트 할 때 쓰면 좋을 것 같기도 하다. 각 기능마다 레고블록처럼 갈아끼울 수 있기 때문에 초기에 사용하면 유용한 기능인 것 같다.

 

장점

 - 서브클래싱 대신 사용할 수 있습니다.

 - 조건문을 필요로 하지 않고 자체 클래스 내에서 각 동작을 정의합니다.

 - 응용프로그램을 변경하지 않고도 새로운 동작을 보다 쉽게 확장하고 통합할 수 있습니다.

 

사용시기

 - 여러 클래스가 동작이 다른경우

 - 알고리즘의 다른 변형이 필요할 때 사용됩니다.

 

UML

Strategy Interface Class : Strategy

public interface Strategy {
    public float calculation(float a, float b);
}

 

Strategy Class : Addition, Subtraction, Multiplication

public class Addition implements Strategy{  
    @Override  
    public float calculation(float a, float b) {  
        return a + b;  
    }  
}
public class Subtraction implements Strategy{  
    @Override  
    public float calculation(float a, float b) {  
        return a - b;  
    }  
}
public class Multiplication implements Strategy{  
    @Override  
    public float calculation(float a, float b) {  
        return a * b;  
    }  
}

 

Operation Class : Context, StrategyPatternDemo

public class Context {  
    private Strategy strategy;  
       
    public Context(Strategy strategy){  
        this.strategy = strategy;  
    }  
  
    public float executeStrategy(float num1, float num2){  
        return strategy.calculation(num1, num2);  
    }  
}
public class StrategyPatternDemo {  
    public static void main(String[] args) throws NumberFormatException, IOException {  
        System.out.print("Enter the first value: 20");  
        float value1=Float.parseFloat("20");  

        System.out.print("Enter the second value: 10");  
        float value2=Float.parseFloat("10");  
        
        Context context = new Context(new Addition());          
        System.out.println("Addition = " + context.executeStrategy(value1, value2));  
  
        context = new Context(new Subtraction());       
        System.out.println("Subtraction = " + context.executeStrategy(value1, value2));  
  
        context = new Context(new Multiplication());        
        System.out.println("Multiplication = " + context.executeStrategy(value1, value2));  
    }  
}

 

출처 : https://www.javatpoint.com/

know-one-by-one.tistory.com/59