Computer Science/Design Pattern

[Design Pattern] Strategy Pattern

Donghwan 2021. 8. 3. 17:43

전략패턴은 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴입니다. 기존의 코드 변경 없이 행위를 자유롭게 바꿀 수 있게 해주는 OCP를 준수한 디자인 패턴 방법을 말합니다. 전략패턴은 컴포지션 관계(has-a)를 가집니다. 컴포지션은 해당 인스턴스의 내부 구현이 바뀌더라도 영향을 받지 않습니다. 또 인터페이스를 활용하여 다른 인스턴스를 쉽게 변경할 수 있습니다.

Context

  • 스트래티지 패턴을 이용하는 역할을 수행합니다.
  • 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 생성자 또는 Setter를 제공합니다.
public class Context {
    private Strategy strategy;

    public void setTranslateStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public void event() {
        this.strategy.event();
    }
}

 

Strategy

  • 인터페이스나 추상클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시합니다.
public interface Strategy {
    public void event();
}

 

ConcreteStrategy

  • Strategy Interface를 구현한 클래스입니다.
public class ConcreteStrategyA implements Strategy {
    @Override
    public void event() {
        System.out.println("A");
    }
}


public class ConcreteStrategyB implements Strategy {
    @Override
    public void event() {
        System.out.println("B");
    }
}

 

public class Main {
    public static void main(String[] args) {
        Context a = new Context();
        Context b = new Context();

        a.setTranslateStrategy(new ConcreteStrategyA());
        a.event(); //A
        a.setTranslateStrategy(new ConcreteStrategyB());
        a.event(); //B
        b.setTranslateStrategy(new ConcreteStrategyA());
        b.event(); //A
        b.setTranslateStrategy(new ConcreteStrategyB());
        b.event(); //B
    }
}

 


출처

728x90
반응형