POOPOO: 배변 일기 앱
SMALL
행동패턴 목록
- 책임연쇄 패턴 (Chan of Responsibility Pattern)
- 커맨드 패턴 (Command Pattern)
- 해석자 패턴 (Interpreter Pattern)
- 반복자 패턴 (Iterator Pattern)
- 중재자 패턴 (Mediator Pattern)
- 메멘토 패턴 (Memento Pattern)
- 관찰자 패턴 (Observer Pattern)
- 상태 패턴 (State Pattern)
- 전략 패턴 (Strategy Pattern)
- 템플릿 패턴 (Template Pattern)
클래스의 수를 상관하지 않고 단위기능의 처리를 테스트 할 때 쓰면 좋을 것 같기도 하다. 각 기능마다 레고블록처럼 갈아끼울 수 있기 때문에 초기에 사용하면 유용한 기능인 것 같다.
장점
- 서브클래싱 대신 사용할 수 있습니다.
- 조건문을 필요로 하지 않고 자체 클래스 내에서 각 동작을 정의합니다.
- 응용프로그램을 변경하지 않고도 새로운 동작을 보다 쉽게 확장하고 통합할 수 있습니다.
사용시기
- 여러 클래스가 동작이 다른경우
- 알고리즘의 다른 변형이 필요할 때 사용됩니다.
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));
}
}
LIST