Head First Design Patterns의 Duck 예제에 표시된 것처럼 컨텍스트 상속은 전략 패턴과 관련이 없습니까?


10

에서 헤드 퍼스트 디자인 패턴 그것은 가르치는 전략 패턴을 오리의 다른 서브 클래스가 런타임에 특정 동작을 할당 할 수있는 오리 예를 사용하여. 전략 패턴의 목적은 런타임에 단일 객체의 동작 을 변경 하는 것이지만, Duck의 상속을 사용하여 다양한 유형의 Duck의 동작을 변경하는 것입니다.

전략 패턴

관련성?

Duck의 컨텍스트 상속이 전략 패턴과 관련이 없거나 오리 유형이 다양하고 또한 행동 패턴을 변경하는 것이 전략 패턴을 채택해야하는 좋은 이유입니까? 둘 다 변경해야하는 상황이 전략 패턴을 사용해야하는 좋은 이유가됩니까? 왜 이것을 전략 패턴 예제로 포함합니까?

더 간단한 예

Duck 클래스 (파생 클래스 없음)만으로이 예제를 더 단순화 할 수 있습니까? 그런 다음 하나의 오리 개체를 구현할 때 자체 개체 유형에 의존하지 않는 특정 상황에 따라 다른 동작을 할당 할 수 있습니다. 예를 들어 : 날씨에 따라 FlyBehavior가 변경되거나 시간 또는 오리의 배고픈 정도에 따라 QuackBehavior가 변경됩니다. 나는 이것이 책의 문제와는 다른 문제를 해결할 것이라는 것을 알고 있지만, 내가 찾고있는 것은 대체 할 관련 전략 패턴 예입니다.

위의 예가 전략 패턴을 구성합니까?

편집하다:

컨텍스트 상속없이 전략 패턴 인 Hunter.javasolver.py 보다 엄격하게 준수하는 2 가지 간단한 전략 패턴 예제를 찾는 데 성공했습니다 .

답변:


7

네, 당신이 올바른 길을 가고 있다고 생각합니다. 전략 패턴을 사용하는 클래스는 서브 클래스 일 필요는 없습니다. 전략 패턴은 코드 재사용을위한 상속 의 대안 입니다. 이것은 상속과 구성의 더 넓은 비교로 돌아옵니다.

에서 디자인 패턴 : 재사용 OOP의 요소 는 전략 패턴을 할 때 사용하는

  • 하위 클래스의 폭발을 피하십시오 (행동의 조합으로 인해)
  • 런타임에 동작을 교체해야하는 경우

상속을 사용하여 Quack 및 Fly 비헤이비어를 구현하는 경우 이러한 모든 하위 클래스를 사용하여 모든 비헤이비어 조합을 나타냅니다.

  • FlyableQuackableDuck
  • FlyableSqeakableDuck
  • FlyableMuteDuck
  • NoFlyQuackableDuck
  • NoFlySqueakableDuck
  • NoFlyMuteDuck

서브 클래스가 너무 많으면 유지 관리가 어려워서이 경우 전략 패턴이 선호됩니다. Flyability와 Quackability를 캡슐화하는 두 가지 속성 만 있으면되며 새 클래스를 만들지 않고도 이러한 속성을 혼합하고 일치시킬 수 있습니다.

날씨 변화로 인한 오리의 비행 속성이 조건으로 인해 NoFly 개체로 대체 될 수 있다는 런타임 이점도 이미 언급했습니다.

이것은 가능한 경우 상속보다 구성을 선호한다는 충고와 일치합니다.


1

Duck 클래스 (파생 클래스 없음)만으로이 예제를 더 단순화 할 수 있습니까? 그런 다음 하나의 오리 개체를 구현할 때 자체 개체 유형에 의존하지 않는 특정 상황에 따라 다른 동작을 할당 할 수 있습니다.

확실히. 영감을 얻으려면 Head First Object-Oriented Analysis and Design을 살펴보십시오 . "뮤지컬" 악기 서브 클래스 의 폭발을 보여주는 "Rick 's Guitars" 가 있습니다. 이를 해결하기 위해 모든 다양한 행동이 "사양"클래스에 싸여 있으며, 이는 다양한 것을 캡슐화하는 원리를 관찰합니다 .

추상 공장-상황 기반 건설

패턴은 다음과 같습니다 . BTW는 전략 자체를 사용합니다.

구현이 아닌 개념에 중점을 둔다 ... 맑거나 비가 오는 조건 등을 기반으로 사양 개체 를 작성하는 "WeatherFactory"가있을 수 있습니다 .

"NoFlyInFogQuackableMallard"를 구성하기 위해 "공장 팩토리"를 가질 수 있습니다. 실제로 이것은 추상 팩토리 패턴에 관한 것입니다. 아마도 오리 팩토리는 일반적인 오리 유형을 만들고 WeatherFactory는 오리 유형 특정 안개 날씨 행동을 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.