Java Design Pattern - Strategy Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Behavioral Patterns, 행위 패턴

  • 객체간의 상호작용과 책임을 중시하는 패턴이다.
  • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하면서 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴이다.

Strategy Pattern

  • 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴이다.

Example

public interface Operation {

  public int doOperation(int num1, int num2);

}
public class AddOperation implements Operation {

  @Override
  public int doOperation(int num1, int num2) {
    return num1 + num2;
  }

}
public class MultiplyOperation implements Operation {

  @Override
  public int doOperation(int num1, int num2) {
    return num1 * num2;
  }

}
public class SubstractOperation implements Operation {

  @Override
  public int doOperation(int num1, int num2) {
    return num1 - num2;
  }

}
  • 계산 방식을 동적으로 변경하기 위해서 Operation 인터페이스를 정의하고, Add, Multiply, Substract 행위를 하는 각 Operation 객체를 구현한다.
public class Context {

  private Operation operation;

  public Context(Operation operation) {
    this.operation = operation;
  }

  public int executeStrategy(int num1, int num2) {
    return operation.doOperation(num1, num2);
  }

}
  • Context 객체는 동적으로 Operation의 구현체 중 하나를 받아 행위를 변경하여 수행 가능하도록 구현된 객체이다.
public class StrategyPatternMain {

  public static void main(String[] args) {
    Context context = new Context(new AddOperation());
    System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

    context = new Context(new SubstractOperation());
    System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

    context = new Context(new MultiplyOperation());
    System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
  }

}
  • Content 객체에 필요한 Add, Substract, Multiply 행위에 대한 구현체를 주입하여 활용 가능한 것을 확인 할 수 있다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기