시나리오: 오리 시뮬레이션 게임 게임에는 오리가 꽥꽥거리고 헤엄칠 수 있습니다.
사전 디자인 계획은 아래 UML 클래스 다이어그램에 나와 있습니다.
변경: 어느 날 게임이 시작되기 전까지는 이 초기 단계는 완벽해 보였습니다. Duck이 Fly를 요구하는 경우, 현재 가장 간단한 해결책은 상위 클래스에 fly 메소드를 추가하는 것입니다. UML 다이어그램은 다음과 같습니다.
One day. 재난이 발생했습니다. 게임 내에는 수많은 고무 오리가 날아다니고 있습니다. . . .
이때 가장 간단한 해결책은 RubberDuck 클래스의 fly 메서드를 덮어쓰는 것입니다. 클래스 다이어그램은 다음과 같습니다.
변경: 게임 러버덕 외에도 꽥꽥거리지도 날지도 못하는 DecoyDuck(미끼오리) 등 다양한 종류의 오리들이 합류하고 있습니다.
해결책:
1. 꽥꽥거리는 소리를 인터페이스로 디자인합니다. 꽥꽥거리는 소리만 상속할 수 있습니다. 해당 UML 클래스 다이어그램은 다음과 같습니다. decoyduck 수영 방법 불필요)
단점: 이 솔루션은 코드 중복이 쉽게 발생하고 동일한 파리 및 돌팔이 방법을 재사용하지 않습니다
2. duck의 속성으로 flyable과 quackable을 독립적인 클래스로 만듭니다. 해당 UML 클래스 다이어그램은 다음과 같습니다.
이 방법에서는 redheadduck, ruberduck, mallardduck 및 decoyduck을 사용합니다. 특정 플라이 및 돌팔이 메소드를 구현하려면 flyablity 및 quackablity 클래스의 관련 메소드를 사용해야 합니다. 이 솔루션은 디자인 철학에서 "특정 구현을 위한 프로그래밍이 아니라 인터페이스를 위한 프로그래밍" 원칙을 위반합니다.
3. flyable을 교체하세요. 그리고 quackable 인터페이스로 설계되어 다양한 비행 스킬과 콜링 스킬로 구체적인 구현이 완성됩니다.
Uml 클래스 다이어그램은 다음과 같습니다.
물론 고무오리가 날지 못한다는 이유만으로 상황은 여전히 변하고 있습니다. 지금은 미래에 날 수 없다는 뜻이 아닙니다. 비행 능력을 설정하는 방법이 필요합니다. 클래스 다이어그램은 다음과 같습니다.
코드 다운로드 : 코드 다운로드 (http://www.walk-sing.com /strategy strategy mode.zip)
참고 : 실제 코드 작성 과정에서 구현 후 Quack이 Quack 메소드를 사용하는 경우를 발견했습니다. quackable, 돌팔이 메소드는 전화상 돌팔이의 생성자이기도 하므로 작성 시 돌팔이 클래스 이름이 돌팔이 카테고리로 변경되었으니 알아두시기 바랍니다.
이상에서는 다양한 측면을 포함하여 디자인 패턴 입문 - 전략 패턴(php 버전)을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.