Maison > Article > développement back-end > Explication détaillée de l'utilisation du modèle de méthode de modèle PHP
Cette fois, je vais vous apporter une explication détaillée de l'utilisation du modèle de méthode de modèle PHP. Quelles sont les précautions lors de l'utilisation du modèle de méthode de modèle PHP. Ce qui suit est un cas pratique, prenons un. regarder.
Qu'est-ce que le modèle de méthode de modèle
Méthode de modèle (méthode de modèle)Modèle de conception A La méthode de classe templateMethod() est utilisée, qui est une méthode concrète dans une classe abstraite. La fonction de cette méthode est de trier la séquence des méthodes abstraites, et l'implémentation spécifique est laissée à la classe concrète. Le modèle définit l'algorithme dans l'opération. Le "squelette" est implémenté par des classes concrètes.
Quand utiliser les méthodes de modèle
Si quelques étapes dans l'algorithme ont été clarifiés. Cependant, ces étapes peuvent être implémentées de différentes manières et vous pouvez utiliser la méthode modèle pour déboguer. Si les étapes de l'algorithme restent inchangées, vous pouvez laisser ces étapes à la sous-classe pour une implémentation spécifique. Dans ce cas, vous pouvez utiliser la méthode template pour concevoir le modèle. Pour organiser les opérations de base (fonctions/méthodes) dans la classe abstraite, les sous-classes implémentent ensuite ces opérations requises par l'application
Il y en a une autre. utilisation qui est légèrement plus compliquée, et vous devrez peut-être mettre les comportements communs des sous-classes dans une classe pour éviter la duplication de code.
Si vous utilisez plusieurs classes pour résoudre le même problème important, le code en double peut rapidement apparaître.
Encore une chose, vous pouvez utiliser des modèles. Le modèle de méthode contrôle l'expansion des sous-classes, ce qu'on appelle le "hook".
Exemple
En programmation PHP, vous pouvez souvent rencontrer un problème : Etablir une bande Image du titre de l'image Cet algorithme est assez simple, il s'agit d'afficher l'image, puis d'afficher le texte en dessous de l'image.
Étant donné que seuls deux participants sont impliqués dans la conception du modèle, il s'agit de l'un des modèles les plus faciles à comprendre, et en même temps également très utile pour les constructions d'abstraction et cette méthode est implémentée par une classe concrète templateMethod()
La classe abstraite est la clé ici, car elle contient également des méthodes concrètes et abstraites. Les méthodes modèles sont souvent des méthodes concrètes et leurs opérations sont abstraites
Le. deux méthodes abstraites sont addPicture et addTitile. Les deux opérations contiennent respectivement un paramètre, représentant les informations URL et le titre de l'image .
Template.phpCours de béton
<?php abstract class Template { protected $picture; protected $title; public function display($pictureNow, $titleNow) { $this->picture = $pictureNow; $this->title = $titleNow; $this->addPicture($this->picture); $this->addTitle($this->title); } abstract protected function addPicture($picture); abstract protected function addTitle($title); }
Concrete.php
Client
<?php include_once('Template.php'); class Concrete extends Template { protected function addPicture($picture) { $this->picture = 'picture/' . $picture; echo "图像路径为:" . $this->picture . '<br />'; } protected function addTitle($title) { $this->title = $title; echo "<em>标题: </em>" . $this->title . "<br />"; } }
Client .php
La variable $concrete instancie Concrete, mais elle appelle la méthode du modèle d'affichage, il s'agit d'une opération spécifique héritée de la classe parent. La classe parent appelle l'opération de la sous-classe via <.>.
<?php function autoload($class_name) { include $class_name . '.php'; } class Client { public function construct() { $title = "chenqionghe is a handsome boy"; $concrete = new Concrete(); $concrete->display('chenqionghe.png', $title); } } $worker = new Client();Après l'exécution, la sortie est
display()
Titre : chenqionghe est un beau garçon
Comme vous pouvez le voir, le client n'a qu'à fournir l'adresse et le titre de l'image
Modèle de conception de la méthode Le crochet dans
Parfois, la fonction de méthode modèle peut avoir une étape que vous ne souhaitez pas. Dans certains cas spécifiques, vous ne souhaiterez peut-être pas effectuer cette étape. Dans ce cas, la méthode modèle peut être utilisée Hook.Dans le Modèle de conception de méthode de modèle, vous pouvez utiliser des hooks pour intégrer une méthode au modèle, mais cette méthode n'est pas nécessairement utilisée. En d'autres termes, elle fait partie de la méthode, mais elle contient un hook et peut gérer les exceptions. peut ajouter un élément facultatif à l'algorithme.De cette façon, bien qu'il soit toujours exécuté dans l'ordre établi par la méthode modèle, il peut ne pas terminer l'action attendue par la méthode modèle. Pour cette situation facultative, les hooks sont l'outil le plus idéal. pour résoudre ce problème.
ExempleFaites vos achats en ligne et bénéficiez d'une réduction de 20 % si le coût total du produit dépasse 200 yuans, 12,95 yuans seront supprimés. .
Établir un hookIl est intéressant d'établir une méthode hook dans une méthode modèle Bien que les sous-classes puissent modifier le comportement du hook, elles doivent quand même suivre. la définition dans le modèle L'ordre de
IHook.php<?php abstract class IHook { protected $hook; protected $fullCost; public function templateMethod($fullCost, $hook) { $this->fullCost = $fullCost; $this->hook = $hook; $this->addGoods(); $this->addShippingHook(); $this->displayCost(); } protected abstract function addGoods(); protected abstract function addShippingHook(); protected abstract function displayCost(); }
这里有3个抽象方法: addGoods()
, addShippingHook()
,displayCost()
, 抽象类IHook实现的templateMethod()
中确定了它们的顺序. 在这里, 钩子方法放在中间, 实际上模板方法指定的顺序中, 钩子可以放在任意位置. 模板方法需要两个参数, 一个是总花费, 另外还需要一个变量用来确定顾客是否免收运费.
实现钩子
一旦抽象类中建立了这些抽象方法, 并指定了它们执行的顺序, 子类将实现所有这3个方法:
Concrete.php
<?php class Concrete extends IHook { protected function addGoods() { $this->fullCost = $this->fullCost * 0.8; } protected function addShippingHook() { if(!$this->hook) { $this->fullCost += 12.95; } } protected function displayCost() { echo "您需要支付: " . $this->fullCost . '元<br />'; } }
addGoods和displayCost都是标准方法, 只有一个实现., 不过, addShippingHook的实现有所不同, 其中有一个条件来确定是否增加运费. 这就是钩子.
客户Client
Client.php
<?php function autoload($class_name) { include $class_name . '.php'; } class Client { private $totalCost; private $hook; public function construct($goodsTotal) { $this->totalCost = $goodsTotal; $this->hook = $this->totalCost >= 200; $concrete = new Concrete(); $concrete->templateMethod($this->totalCost, $this->hook); } } $worker = new Client(100); $worker = new Client(200);
该Client演示了分别购买100块钱和200块钱的商品最后的费用,运行结果如下
您需要支付: 92.95元
您需要支付: 160元
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
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!