Maison >développement back-end >tutoriel php >Parlons du modèle de stratégie en PHP
Dans l'article précédent "Une analyse approfondie du mode commande en PHP", nous avons présenté le mode commande en PHP. Cet article vous amènera à comprendre le mode stratégie en PHP.
Le modèle de stratégie, également connu sous le nom de modèle de politique, est un modèle de conception comportementale.
Définition GoF : Définissez une série d'algorithmes, encapsulez-les un par un et rendez-les interchangeables. Ce modèle permet à l'algorithme de changer indépendamment du client qui l'utilise.
Diagramme de classes GoF
Implémentation du code
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"; } }
Définir l'abstraction et l'implémentation de l'algorithme.
class Context{ private $strategy; function __construct(Strategy $s){ $this->strategy = $s; } function ContextInterface(){ $this->strategy->AlgorithmInterface(); } }
Définir le contexte de l'environnement d'exécution.
$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();
Enfin, appelez l'algorithme approprié à la demande côté client.
Code complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy.php
Exemple
Explication dans le modèle, mais cette fois nous utilisons le modèle de stratégie pour l'implémenter !
Diagramme des classes d'envoi de SMSCode source complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/10.strategy/source/strategy-message.php
Explication<?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();
Veuillez comparer le diagramme de classes ci-dessous. Il n'y a fondamentalement aucune différence entre le modèle
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!