2013-08-08 6 views
4

GoF 패턴을 보면 State와 Stategy 패턴이 유사하다는 것을 알 수 있습니다. 둘 다 동작을 수정하기 위해 다형성 클래스를 스왑합니다. 다른 사람이 같은 것을 찾았습니까?상태 패턴과 전략 패턴의 차이점

정확한 차이점은 무엇입니까?

+2

중복 된 http://stackoverflow.com/questions/1658192/what-is-the-difference-between-strategy-design-pattern-and-state-design-pattern –

답변

0

전략 패턴은 몇 가지 작업을 수행 할 '방법'을 결정하고 상태 패턴을 수행하기 위해 ''에서 결정한다.

상태 패턴을 사용하면 상태 유지 (컨텍스트) 클래스는 상태 또는 유형이 무엇인지, 사용 가능한 상태 또는 유형을 알고 있기 때문에 완화됩니다. 이는 클래스가 ODF (Open-Closed Design Principle)를 준수한다는 것을 의미합니다. 클래스는 변경 될 수있는 상태/유형이 있지만 상태/유형은 확장이 가능합니다.

전략 패턴을 사용하면 알고리즘 사용 (컨텍스트) 클래스가 특정 작업을 수행하는 방법에 대한 지식 ("알고리즘")에서 벗어나게됩니다. 이 사건은 또한 OCP를 준수합니다. 클래스는이 작업을 수행하는 방법에 대한 변경을 위해 닫혀 있지만 디자인은이 작업을 해결하기위한 다른 알고리즘을 추가하는 데 매우 유용합니다.

6

상태와 전략 패턴은 둘 다 별도의 컴포지션을 사용하여 작성된 객체에 위임하여 비헤이비어를 구현할 수 있으며 둘 모두 런타임에 구성된 오브젝트를 변경하여 비헤이비어를 동적으로 변경할 수있는 유연성을 제공합니다. 하지만 몇 가지 주요 차이점이 있습니다 :

  1. 상태 패턴에서 클라이언트는 상태 개체에 대해 아무것도 모릅니다. 상태 변경은 클라이언트에게 투명하게 발생합니다. 클라이언트는 컨텍스트에서 메소드를 호출하기 만하면 컨텍스트가 자체 상태를 감독합니다. 클라이언트는 상태 변경을 인식하지 못하기 때문에 상태 변경으로 인해 동작이 변경 될 때마다 다른 클래스에서 컨텍스트가 인스턴스화되는 것처럼 클라이언트에 나타납니다. 객체는 클래스를 패턴 상태의 공식 정의로 변경하는 것처럼 보입니다. 이 패턴은 잘 정의 된 일련의 상태 전이를 중심으로 구성됩니다. 상태 변경은 패턴의 존재의 열쇠입니다.

  2. 비록 전략 패턴이 구성된 전략 객체를 동적으로 변경함으로써 행동을 변경할 수있는 융통성을 제공하더라도 대부분 각 상황에 맞는 적절한 전략 객체가 설정되어 있습니다. 즉, 비록 패턴이 구성된 전략 객체를 동적으로 변경하는 방법을 제공하더라도, 그것의 필요성은별로 없다. 그것이 완료되어야하더라도, 그것은 변화를하는 클라이언트입니다. 클라이언트는 컨텍스트에서 setter 메서드를 호출하고 새 전략 개체를 전달합니다. 따라서 동작 변경은 클라이언트에게 투명하지 않으며 클라이언트에 의해 시작되고 제어됩니다. 패턴은 상태 패턴과 같이 일련의 잘 정의 된 동작 변경을 권장하지 않습니다. 클라이언트는 전략 객체에 대해 알고 있으며 일반적으로 전략 객체를 생성하는 동안 컨텍스트에서 적절한 전략 객체를 설정합니다. 어떤 전략 클라이언트 컨트롤은 컨텍스트가 사용하는 객체 만, 상태 패턴으로, 클라이언트는 문맥 자세한 내용

    를 사용하는 상태 객체 (들)에 대해 아무것도 알고 pls는 아래의 링크를 http://myrandomsparks.blogspot.in/2012/05/strategy-vs-state-pattern.html

참조
+0

"따라서 동작 변경 사항은 '클라이언트에게 투명하지 않습니다. '시작되고 클라이언트에 의해 통제된다. 나는 그것이 '클라이언트'가 아니라 '문맥'이라고 생각한다. –

+0

@AnuThomasChandy 이것은이 맥락에서 동일합니다. –

관련 문제