>  기사  >  백엔드 개발  >  전략 패턴: 디자인 패턴 중 하나

전략 패턴: 디자인 패턴 중 하나

PHPz
PHPz원래의
2023-08-28 17:53:061013검색

전략 패턴: 디자인 패턴 중 하나

지금까지 이 시리즈에서는 세 가지 디자인 패턴을 다루었습니다. 우리는 디자인 패턴의 네 가지 카테고리를 정의합니다. 이번 글에서는 Behavioral Design Patterns에 속하는 Strategic Design Pattern에 대해 설명하겠습니다.

질문이 있을 수 있습니다. 언제 이 디자인 패턴을 사용해야 할까요? 동일한 작업을 수행하기 위한 여러 방법(알고리즘)이 있고 애플리케이션이 사용자가 가지고 있는 매개변수에 따라 특정 방법을 선택하기를 원할 때를 말합니다. 이 모드는 전략 모드라고도 합니다.

이 기사의 매우 간단한 예는 정렬 기능입니다. 예를 들어, 배열 정렬을 위한 여러 알고리즘이 있지만 배열 요소 수에 따라 최상의 성능을 얻기 위해 사용할 알고리즘을 선택해야 합니다.

이 모드는 전략 모드라고도 합니다.

질문

여러 결제 게이트웨이를 통합한 전자상거래 웹사이트의 예를 들어보겠습니다. 웹사이트에는 여러 결제 게이트웨이가 있지만 요청 시 프런트엔드에 모두 표시되지는 않습니다. 대신, 장바구니 금액에 따라 적절한 결제 게이트웨이를 즉시 선택해야 합니다.

간단한 예로 장바구니 금액이 500달러 미만인 경우 PayPal 기준으로 결제를 진행해야 하지만, 500달러 이상인 경우 저장된 신용카드 정보를 사용하여 처리해야 합니다. (정보가 이미 저장되어 있다고 가정) ) .

올바른 전략이 구현되지 않으면 코드는 다음과 같습니다.

먼저 페이팔 결제와 신용카드 결제를 위한 주요 클래스를 제공할 예정이며, 아래에 추가하겠습니다.

으아악

여기서 코드가 제대로 작동하려면 조건문을 배치해야 한다고 말할 수 있습니다. 해당 논리를 새로 변경해야 하거나 해당 논리에서 버그를 발견할 때 얼마나 많은 변경을 수행해야 하는지 상상해 보세요. 이 코드가 사용되는 모든 곳에 패치를 추가해야 합니다.

솔루션

동일한 요구 사항을 구현하지만 전략 패턴을 사용하여 코드를 더 명확하고 이해하기 쉽고 확장 가능하게 만들 것입니다.

인터페이스

먼저, 모든 다양한 지불 게이트웨이 클래스가 사용할 인터페이스를 구현하겠습니다. 궁극적으로 이것이 우리의 전략입니다.

으아악

다음으로 지금까지 구현한 것과 다른 전략을 사용할 수 있는 메인 클래스를 만들겠습니다.

으아악

여기서 결제 방법의 조건부 로딩이 payAmount 방법에서 수행되는 것을 볼 수 있습니다. 모든 것을 함께 포장하고 추가로 사용하는 방법을 살펴보겠습니다.

으아악

결제 게이트웨이 롤오버가 애플리케이션에 투명하지 않다는 것을 알 수 있습니다. 매개변수에 따라 거래를 처리하는 데 사용할 수 있는 적절한 결제 게이트웨이가 있습니다.

새로운 전략 추가

나중 단계에서 사용자가 다른 로직(여기서는 새 결제 게이트웨이)을 사용하여 새 전략을 추가해야 하는 경우 이 경우 매우 간단합니다. 새로운 지불 게이트웨이인 Moneybooker를 추가하고 카트 금액이 $500를 초과하지만 $1,000 미만일 때 자금을 처리하려고 한다고 가정해 보겠습니다.

우리가 해야 할 일은 인터페이스를 구현하는 새로운 전략 클래스를 만드는 것뿐입니다. 그러면 이제 준비가 완료되었습니다.

으아악

이제 새로운 전략 수업이 준비되었습니다. 변경해야 할 것은 주요 payAmount 방법뿐입니다. 다음과 같이 수정해야 합니다:

으아악

여기서 메소드를 호출하는 클라이언트 코드가 아닌 payAmount 메소드에서만 변경했음을 알 수 있습니다.

결론

결론적으로, 동일한 작업을 수행하는 여러 가지 방법이 있는 경우(소프트웨어 언어에서는 동일한 작업을 수행하는 여러 알고리즘이 있는 경우) 전략 패턴 구현을 고려해야 합니다.

이 모드를 사용하면 이러한 알고리즘의 전환이 애플리케이션에 투명하지 않기 때문에 알고리즘을 자유롭게 추가/제거할 수 있습니다.

전략 디자인 패턴을 보여주기 위해 기본적이면서도 유용한 예제를 제공하기 위해 최선을 다했지만, 추가 의견이나 질문이 있는 경우 아래 피드에 자유롭게 추가해 주세요.

위 내용은 전략 패턴: 디자인 패턴 중 하나의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.