이전 기사 "PHP의 명령 모드에 대한 심층 분석"에서 PHP의 명령 모드를 소개했습니다. 이 기사에서는 PHP의 전략 모드를 이해하도록 안내합니다.
정책 패턴이라고도 알려진 전략 패턴은 행동 디자인 패턴입니다.
GoF 정의: 일련의 알고리즘을 정의하고 하나씩 캡슐화하고 상호 교환 가능하게 만듭니다. 이 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다.
GoF 클래스 다이어그램
코드 구현
interface Strategy{ function AlgorithmInterface(); } class ConcreteStrategyA implements Strategy{ function AlgorithmInterface(){ echo "算法A"; } } class ConcreteStrategyB implements Strategy{ function AlgorithmInterface(){ echo "算法B"; } } class ConcreteStrategyC implements Strategy{ function AlgorithmInterface(){ echo "算法C"; } }
알고리즘 추상화 및 구현을 정의합니다.
class Context{ private $strategy; function __construct(Strategy $s){ $this->strategy = $s; } function ContextInterface(){ $this->strategy->AlgorithmInterface(); } }
실행 환경 컨텍스트를 정의합니다.
$strategyA = new ConcreteStrategyA(); $context = new Context($strategyA); $context->ContextInterface(); $strategyB = new ConcreteStrategyB(); $context = new Context($strategyB); $context->ContextInterface(); $strategyC = new ConcreteStrategyC(); $context = new Context($strategyC); $context->ContextInterface();
마지막으로 클라이언트 측에서 요청 시 적절한 알고리즘을 호출합니다.
간단한 팩토리와 매우 유사하므로 간단한 팩토리 메서드도 따릅니다. 휴대폰을 일괄 생산하기 위해 공장(ConcreteStrategy)을 찾고자 하는 휴대폰 제조업체(Client)이며, 채널 제공자(Context)를 통해 휴대폰을 제조하기 위해 이 공장에 주문합니다. 파운드리(전략)에서 직접 생산물을 공장으로 이관합니다. 완성된 휴대폰이 나에게 배송됩니다(ContextInterface()). 마찬가지로, 구체적인 구현에 신경 쓸 필요는 없고 우리에게 연락하는 채널 공급업체만 감독하면 됩니다.
전체 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy.php
아직 SMS 기능이 있습니다. 구체적인 요구사항은 Simple Factory 패턴으로 설명하지만 이번에는 전략 패턴을 활용해서 구현해보겠습니다!
SMS 전송 클래스 다이어그램
전체 소스 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy-message.php
<?php interface Message { public function send(); } class BaiduYunMessage implements Message { function send() { echo '百度云发送信息!'; } } class AliYunMessage implements Message { public function send() { echo '阿里云发送信息!'; } } class JiguangMessage implements Message { public function send() { echo '极光发送信息!'; } } class MessageContext { private $message; public function __construct(Message $msg) { $this->message = $msg; } public function SendMessage() { $this->message->send(); } } $bdMsg = new BaiduYunMessage(); $msgCtx = new MessageContext($bdMsg); $msgCtx->SendMessage(); $alMsg = new AliYunMessage(); $msgCtx = new MessageContext($alMsg); $msgCtx->SendMessage(); $jgMsg = new JiguangMessage(); $msgCtx = new MessageContext($jgMsg); $msgCtx->SendMessage();
설명
원본 주소: https://juejin.cn/post/6844903955860996110
저자: 하드코어 프로젝트 매니저
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP의 전략 패턴에 대해 이야기해 봅시다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!